JohnyRox

Membro
  • Total de itens

    287
  • Registro em

  • Última visita

Reputação

34 Contribuidor

4 Seguidores

Sobre JohnyRox

  • Rank
    Membro Intermediário
  1. Sem uma dll de sendmac atrelada ao hexed, de nada serve isso ai. É só como fazer o emulador aceita o mac durante o login. Segredo está em criar uma dll em VB e arrumar uma forma de atrelar ao hexed Ex: Dim mc As System.Management.ManagementClass Dim mo As System.Management.ManagementBaseObject mc = New Management.ManagementClass("Win32_NetworkAdapterConfiguration") Dim moc As Management.ManagementObjectCollection = mc.GetInstances For Each mo In moc If mo.Item("IPenabled") = True Then ListBox1.Items.Add("Endereço MAC " & mo.Item("MacAddress")) End If #include <windows.h> #include <shellapi.h> #include <winsock.h> #include <stdio.h> #include <iphlpapi.h> #include <assert.h> #define IP 127.0.0.1 // IP do servidor #define PORT 6900 // Porta de Login static void print_mac_address(unsigned char md[]); static char mac_address[20]; int get_mac_address(void); int main(void) { struct sockaddr_in sdAddr, servAddr; LPHOSTENT host_entry; WSADATA wsaData; int sd; // Aloca o mac em uma matriz get_mac_address(); WSAStartup(MAKEWORD(2,1), &wsaData); if(!(host_entry = gethostbyname(IP))) return -1; // Cria o socket if(!(sd = socket(AF_INET, SOCK_DGRAM, 0))) return -1; sdAddr.sin_family = AF_INET; sdAddr.sin_addr.s_addr = htonl(INADDR_ANY); sdAddr.sin_port = htons(0); servAddr.sin_family = AF_INET; servAddr.sin_addr = *((LPIN_ADDR)*host_entry->h_addr_list); servAddr.sin_port = htons(PORT); // Envia o Mac if(!(sendto(sd, mac_address, strlen(mac_address)+1, 0, (LPSOCKADDR) &servAddr, sizeof(struct sockaddr)))) return -1; closesocket(sd); } int get_mac_address(void) { IP_ADAPTER_INFO AdapterInfo[16]; DWORD dwBufLen = sizeof(AdapterInfo); DWORD dwStatus = GetAdaptersInfo(AdapterInfo,&dwBufLen); assert(dwStatus == ERROR_SUCCESS); PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; do { print_mac_address(pAdapterInfo->Address); pAdapterInfo = pAdapterInfo->Next; } while(pAdapterInfo); return 0; } static void print_mac_address(unsigned char md[]) { sprintf(mac_address, "%02X-%02X-%02X-%02X-%02X-%02X", md[0], md[1], md[2], md[3], md[4], md[5]); }
  2. Por acaso alguém aqui poderia compartilhar a forma de se pegar o mac-address do cliente, via emulador ou até mesmo como os shilds fazem exemplo o antigo Harmony Shield fazia. Sinto que esse assunto não é muito debatido e compartilhado nas comunidades de Ragnarok, e essa ferramenta poderia ajudar bastante as pessoas.
  3. map-server.conf login-server.conf char-server.conf inter-server.conf onde tiver IP : colo tudo pra localhost 127.0.0.1 que vai rodar. depois coloca uma print se tiver erro na execução do emulador.
  4. Alguém sabe porque não esta dando pra fazer download ? o anuncio sai, mas o botão download não aparece.
  5. As formulas básicas são diferentes do tutorial, logo colocar como o do tutorial da erro.
  6. Alguem ai sabe arrumar a o encantar com veneno mortal, não estava funcionado com tocaia mesmo eu comentando o #define RENEWAL_EDP em renewal.h Porém, segue um tutorial que achei por aqui Mas alguém poderia me explicar melhor como voltar o aumento de dano pro normal? #ifdef RENEWAL_EDP if( sc->data[SC_EDP] && skill_id != AS_GRIMTOOTH && skill_id != AS_VENOMKNIFE && skill_id != ASC_BREAKER ){ eatk = eatk * (sc->data[SC_EDP]->val4 / 100 - 1); damage = damage * (sc->data[SC_EDP]->val4 / 100); } #endifNão deu muito certo do jeito dele.
  7. Se For AVG o ANTVIRUS do cara tudo é vírus.
  8. ->map_zone_db.conf ->mapflag - zone.txt ->items.conf item_restricted_consumption_type: 0
  9. Como eu posso adicionar isso diretamente na source? int restock_misc_itemid;int pc_restock_misc_pre(struct map_session_data *sd,int *n,int *amount,int *type, short *reason, e_log_pick_type* log_type){ int index = *n; if (!sd) return 1; restock_misc_itemid = 0; if(sd->status.inventory[index].nameid > 0){ restock_misc_itemid = sd->status.inventory[index].nameid; } return 0;}int pc_restock_misc_post(int retVal, struct map_session_data *sd,int *n,int *amount,int *type, short *reason, e_log_pick_type* log_type){ if (retVal==1) return 1; if (restock_misc_itemid && pc->search_inventory(sd,restock_misc_itemid) == -1){ pc_setglobalreg(sd,script->add_str("restkid"), restock_misc_itemid ); npc->event(sd, "Restock::OnRestock", 0); } return 0;}BUILDIN(restock_item){ int rid,rqu,fr; int i,j,flag; TBL_PC *sd; struct item item_tmp; rid = script_getnum( st, 2 ); rqu = script_getnum( st, 3 ); fr = script_getnum( st, 4 ); sd = script->rid2sd(st); if (!sd) return 0; else if (fr == 2){ struct guild *g; struct guild_storage *gstorage2; g = guild->search(sd->status.guild_id); if (g == NULL) { clif->message(sd->fd, msg_txt(43)); return true; } gstorage2 = gstorage->ensure(sd->status.guild_id); if (gstorage == NULL) {// Doesn't have opened @gstorage yet, so we skip the deletion since *shouldn't* have any item there. return true; } j = gstorage2->storage_amount; gstorage2->lock = 1; for (i = 0; i < j; ++i) { if (gstorage2->items[i].nameid == rid && gstorage2->items[i].amount >= rqu){ memset(&item_tmp, 0, sizeof(item_tmp)); item_tmp.nameid = gstorage2->items[i].nameid; item_tmp.identify = 1; gstorage->delitem(sd, gstorage2, i, rqu); if ((flag = pc->additem(sd,&item_tmp,rqu,LOG_TYPE_STORAGE))){ clif->additem(sd, 0, 0, flag); pc_setglobalreg(sd,script->add_str("restkid1"), gstorage2->items[i].nameid ); pc_setglobalreg(sd,script->add_str("restkid2"), rqu ); script_pushint(st, 1); break; } } } gstorage->close(sd); gstorage2->lock = 0; } else if (fr == 1){ struct storage_data* stor = &sd->status.storage; if (stor == NULL){ return true; } j = stor->storage_amount; if (sd->state.storage_flag){ if (sd->state.storage_flag==1){ sd->state.storage_flag = 0; storage->close(sd); } else{ sd->state.storage_flag = 0; gstorage->close(sd); } } sd->state.storage_flag = 1; for (i = 0; i < j; ++i) { if (stor->items[i].nameid == rid && stor->items[i].amount >= rqu){ memset(&item_tmp, 0, sizeof(item_tmp)); item_tmp.nameid = stor->items[i].nameid; item_tmp.identify = 1; storage->delitem(sd, i, rqu); if ((flag = pc->additem(sd,&item_tmp,rqu,LOG_TYPE_STORAGE))){ clif->additem(sd, 0, 0, flag); pc_setglobalreg(sd,script->add_str("restkid1"), stor->items[i].nameid ); pc_setglobalreg(sd,script->add_str("restkid2"), rqu ); script_pushint(st, 1); break; } } } sd->state.storage_flag = 0; storage->close(sd); } else { script_pushint(st, 0); return true; } script_pushint(st,0); return true;}Acho q fiz quase tudo certo o pc.c compilou porem o script.c dá o seguinte erro .: error: no member named 'ensure' in 'struct_interface' gstorage2 = gstorage->ensure(sd->status.guild_id); Como posso transformar esse arquivo plugin em um diff?
  10. não somente importe as tabelas do igp para dentro do ragnarok, só isso basta.
  11. Não tem como, coloca a tabela do igp dentro da do ragnarok.
  12. Nossa vlw mesmo ! Dei uma olhada superficial e fico show, vou tentar utilizar aqui.
  13. Vou dar umas pesquisadas sobre shell script então vlw ! mas também fico no aguardo dessas novidades ai !
  14. Use esse aqui é do baum ! certificado de Qualidade [spoiler] // .----------------------------------------------------------.// . SoulBlaker Scripts Apresenta: .// . ___________________ .// . / _____/\______ \ .// . \_____ \ | | _/ .// . / \ | | \ .// . /_______ / |______ / .// . \/ \/ .// . [ Cronus Advanced Scripts ] .// . v1.1 .// .----------------------------------------------------------.// ; http://forum.cronus-emulator.com/user/20800-soulblaker ;// .----------------------------------------------------------.// . Script: .// . Devil Square .// .----------------------------------------------------------.// . Por: SoulBlaker Compátivel: Cronus versão: 2.0 .// .----------------------------------------------------------.// . Descrição: .// . Evento Devil Square. .// .----------------------------------------------------------.// . Changelog da Versão: .// . * 2.0 [SoulBlaker] .// . - Iniciado a DevilSquare 2.0. .// . * 2.0b [SoulBlaker] .// . - Correções no for responsável por invocar monstros. .// *----------------------------------------------------------*- script Devil Square#ds_01::DevilSquareEvent -1,{ OnInit:// Qual nível de Base para Entrar na Devil Square//// Deixe 0 para desabilitar esta opção.set $@ds_baselevel, 1; // Qual o custo de Zeny para entrar na Devil Square?//// Deixe '0' para desabilitar esta opção ou ponha a// quantidade de Zeny a ser conbrado.set $@ds_zenycost, 0; // Configurações das Recompensas.// Os itens são entregue aos jogadores que quebrarem// o Arca do Tesouro ao terminar o combate contra os// monstros. Logo abaixo, terá uma série de informações// e configurações, para você configurar da melhor// maneira que achar para o seu servidor. // Configurações de EXP por Recompensa.//// Quanto de Experiência de Base o Jogador vai ganhar// ao matar uma Arca do Tesouro?//// Deixe '0' para desabilitar esta opção ou ponha a// quantidade de exp a ser ganha.set $@ds_baseexp, 0; // Quanto de Experiência de Classe o jogador vai ganhar// ao matar uma Arca do Tesouro?//// Deixe '0' para desabilitar esta opção.set $@ds_jobexp, 0; // Configurações dos Itens.//// Os itens são configurados em váriaveis do tipo 'Array'.// Você deve determinar a chave do array e o id do item no valor.//// Exemplo:// * set $@ds_itemid[<chave>], <valor>// - set $@ds_itemid[0], 501;//// A chave de ser adicionado entre 0~127, no total de 128 itens.// Sempre comece com o índice 0 na chave.//// Exemplo:// set $@ds_itemid[0], 501; // Poção_Vermelha// set $@ds_itemid[1], 502; // Poção_Laranja//// Se você for um usuário avançado, pode adicionar vários valores// em um settarray.//// Exemplo:// * setarray $@ds_itemid[0], <valor1>, <valor2>, <valor3>;// - setarray $@ds_itemid[0], 501, 502, 503; // 0 = 501, 1 = 502, 2 = 503//// Para desabilitar esta opção, habilite a linha abaixo e em seguida desabilite// a linha que está sendo configurado o array!// deletearray $@ds_itemid[0], getarraysize($@ds_itemid);setarray $@ds_itemid[0], 501, 0; // De acordo com a configuração dos ids de itens, ponha a quantidade// do item a ser ganho de acordo com a chave do item.//// Exempo:// set $@ds_itemid[0], 501;// set $@ds_itemqt[0], 10;//// A recompensada será '10'x'501'.setarray $@ds_itemqt[0], 10, 0; // Configurações de Jogadores.//// Qual o mínimo de jogadores para começar o evento DevilSquare?// ATENÇÃO: Nunca ponhe '0' na configuração abaixo.set $@ds_min_player, 1; // Qual o máximo de jogadores que podem entrar no evento DevilSquare?// Ponha '0' para desabilitar esta função.set $@ds_max_player, 30; // Configurações dos Monstros.//// Em Array defina <id>, <quantidade>, <horda>;//// <id>: Id do monstro assassino, ponha '0' para desabilitar o monstro assassino.// <quantidade>: Quantidade do monstro assassino.// <horda>: Em qual horda ele será chamado.//// Para desabilitar, ponha '//' na frente da linha abaixo.setarray $@ds_mobassassin[0], 0, 1785, 1, 5; // Deseja bloquear o uso de Habilidades ao gerar a Arca do Tesouro?// Ponha '0' para desabilitar esta opção.set $@ds_noskilltreasure, 1; // Quantos Rodadas de horda de monstros irá conter no evento?// ATENÇÃO: Nunca remova esta opção, irá causar falhas no evento.set $@ds_horde, 6; // De acordo com a quantidade de horda, em 'Array' defina o gênero da horda.//// 0: Horda Comum.// 1: Horda Mini-Boss.// 2: Horda MvP.//// Exemplo:// setarray $@ds_hogen[0], 0, 0, 0, 1, 2, 0;setarray $@ds_hogen[0], 0, 0, 0, 1, 2, 0; // Os monstros são configurados em váriaveis do tipo 'Array'.// Você deve determinar a chave do array e o id do monstro no valor.//// Exemplo:// * set $@ds_mobid[<chave>], <valor>// - set $@ds_mobid[0], 1189;//// A chave de ser adicionado entre 0~127, no total de 128 monstros.// Sempre comece com o índice 0 na chave.//// Exemplo:// set $@ds_mobid[0], 1189; // Orc Herói// set $@ds_mobid[1], 1019; // Esqueleto Arqueiro//// Se você for um usuário avançado, pode adicionar vários valores// em um settarray.//// Exemplo:// * setarray $@ds_mobid[0], <valor1>, <valor2>, <valor3>;// - setarray $@ds_mobid[0], 1189, 1019, 1149; // 0 = 1189, 1 = 1019, 2 = 1149//// ATENÇÃO: Nunca remova esta opção, irá causar falhas no evento.setarray $@ds_mobid[0],1189, 1016, 1149, 1028, 1165, 1164, // Round 11253, 1191, 1193, 1257, 1192, // Round 21206, 1208, 1131, 1109, 1302, 1190, 1272, 1511, // Round 31507, 1449, 1268, 1456, 1388, 1120, 1259, 1308, 1296, // Round 41399, 1373, 1312, 1190, 1272, 1389, 1157, 1038, 1418, 1087, // Round 51511, 1038, 1373; // Round 6 // De acordo com a configuração dos ids de monstros, ponha a quantidade// de monstros a ser invocado de acordo com a chave do monstro.//// Exempo:// set $@ds_mobid[0], 1189;// set $@ds_mobqt[0], 10;//// Será invocado 10 monstros do id 1189.setarray $@ds_mobqt[0],15, 15, 15, 10, 10, 10, // Round 115, 15, 10, 10, 10, // Round 215, 15, 15, 10, 1, 1, 1, 1, // Round 36, 6, 5, 4, 3, 3, 3, 3, 2, // Round 42, 2, 2, 2, 2, 1, 1, 1, 1, 1, // Round 55, 3, 2; // Round 6 // De acordo com a configuração dos ids de monstros, ponha a orda// que ele será invocado de acordo com a chave do monstro.//// Exempo:// set $@ds_mobid[0], 1189;// set $@ds_mobho[0], 1;//// O monstro do id 1189 será invocado na horda 1.setarray $@ds_mobho[0],1, 1, 1, 1, 1, 1, // Round 12, 2, 2, 2, 2, // Round 23, 3, 3, 3, 3, 3, 3, 3, // Round 34, 4, 4, 4, 4, 4, 4, 4, 4, // Round 45, 5, 5, 5, 5, 5, 5, 5, 5, 5, // Round 56, 6, 6; // Round 6 // As Arcas são configurados em váriaveis do tipo 'Array'.// Você deve determinar a chave do array e o id do monstro arca no valor.//// Exemplo:// * set $@ds_treasureid[<chave>], <valor>// - set $@ds_treasureid[0], 1324;//// A chave de ser adicionado entre 0~127, no total de 128 monstros arca.// Sempre comece com o índice 0 na chave.//// Exemplo:// set $@ds_treasureid[0], 1189; // Orc Herói// set $@ds_treasureid[1], 1019; // Esqueleto Arqueiro//// Se você for um usuário avançado, pode adicionar vários valores// em um settarray.//// Exemplo:// * setarray $@ds_treasureid[0], <valor1>, <valor2>, <valor3>;// - setarray $@ds_treasureid[0], 1328, 1332, 1336; // 0 = 1328, 1 = 1332, 2 = 1336//// ATENÇÃO: Nunca remova esta opção, irá causar falhas no evento.setarray $@ds_treasureid[0], 1324, 1328, 1332, 1336, 1340, 1344, 1348, 1352, 1356, 1360; // De acordo com a configuração dos ids de monstros arca, ponha a quantidade// de monstros arca a ser invocado de acordo com a chave do monstro arca.//// Exempo:// set $@ds_treasureid[0], 1328;// set $@ds_treasureqt[0], 10;//// Será invocado 10 monstros arca do id 1328.setarray $@ds_treasureqt[0], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1;end; // O Evento irá começar neste esquema de hora://// 09:00 - 11:00 - 13:00 - 15:00// 17:00 - 19:00 - 21:00 - 23:00//OnMinute00:if( !$@ds_flag && (gettime(3) == 9 || gettime(3) == 11 || gettime(3) == 13 || gettime(3) == 15 || gettime(3) == 20) )donpcevent "DevilSquareEvent::OnStart";end; OnStart:if( !$@ds_flag ){// Iniciando Variáveis nescessária.set $@ds_clock, 4;set $@ds_flag, 1;// Matando monstros que se encontra no mapa.killmonsterall "ordeal_1-1";// Adicionando mapflags.setmapflag "ordeal_1-1", mf_nomemo; setmapflag "ordeal_1-1", mf_noteleport; setmapflag "ordeal_1-1", mf_nowarp; setmapflag "ordeal_1-1", mf_nowarpto; setmapflag "ordeal_1-1", mf_nomemo;setmapflag "ordeal_1-1", mf_nomobloot;setmapflag "ordeal_1-1", mf_nomvploot;// Habilitando chat no npc.donpcevent "DevilSquareWarp::OnStartArena";// Iniciando contagem de tempo do npc.initnpctimer;announce "[Devil Square]: O Portal está aberto e será fechado em 5 minutos, corram para a arena!",bc_all,"0x00FF00";}end; OnTimer60000: if( !$@ds_clock ){// Inicia o Eventoif( getmapusers("ordeal_1-1") ){set $@ds_round, 1;set $@ds_flag, 2;announce "[Devil Square]: O Portal está fechado, aqueles que não tiveram oportunidade podem tentar na próxima vez!",bc_all,"0x00FF00";donpcevent "DevilSquareEvent::OnStartArena";}else {announce "[Devil Square]: A Devil Square foi cancelada por não haver jogadores na arena!",bc_all,"0x00FF00";donpcevent "DevilSquareWarp::OnEnd";} delwaitingroom "DevilSquareWarp";stopnpctimer; }else {announce "[Devil Square]: O Portal está aberto e será fechado em " + $@ds_clock + " minutos, corram para a arena!",bc_all,"0x00FF00";setnpctimer 0;set $@ds_clock, $@ds_clock - 1;}end; OnStartArena:if( $@ds_flag == 2 && $@ds_round <= $@ds_horde ){// Invocando Monstrosfor( set .@i, 0; .@i < getarraysize($@ds_mobid); set .@i, .@i + 1 ){if( $@ds_mobid[.@i] && $@ds_mobqt[.@i] && $@ds_mobho[.@i] == $@ds_round && (getmonsterinfo($@ds_mobid[.@i], 0)?1:0) )monster "ordeal_1-1", 0, 0, "[Devil Square] "+getmonsterinfo($@ds_mobid[.@i], 0), $@ds_mobid[.@i], $@ds_mobqt[.@i],"DevilSquareEvent::OnMobDead";} // Monstro Assassinoif( $@ds_mobassassin[0] && $@ds_mobassassin[1] && $@ds_mobassassin[2] == $@ds_round && (getmonsterinfo($@ds_mobassassin[0], 0)?1:0) )monster "ordeal_1-1", 0, 0, "[Devil Square] Assassino", $@ds_mobassassin[0], $@ds_mobassassin[1],"DevilSquareEvent::OnAssassinDead"; if( $@ds_hogen[($@ds_round-1)] == 1 )mapannounce "ordeal_1-1", "[Devil Square]: Começou a " + $@ds_round + "ª Square e os Mini-Boss atacam!", bc_all, "0x00FF00";else if( $@ds_hogen[($@ds_round-1)] == 2 )mapannounce "ordeal_1-1", "[Devil Square]: Começou a " + $@ds_round + "ª Square e os Mvp's atacam!", bc_all, "0x00FF00";elsemapannounce "ordeal_1-1", "[Devil Square]: Começou a " + $@ds_round + "ª Square!", bc_all, "0x00FF00"; set $@ds_round, $@ds_round + 1;}else if( $@ds_flag == 2 ){// Checando a possibilidade de usar Habilidades nas arca.if( $@ds_noskilltreasure )setmapflag "ordeal_1-1", mf_noskill; // Invocando as Arca Monstro.for( set .@i, 0; .@i < getarraysize($@ds_treasureid); set .@i, .@i + 1 ){if( $@ds_treasureid[.@i] && $@ds_treasureid[.@i] && (getmonsterinfo($@ds_treasureid[.@i], 0)?1:0) )monster "ordeal_1-1", 0, 0, "[Devil Square] Arca do Tesouro", $@ds_treasureid[.@i], $@ds_treasureqt[.@i],"DevilSquareEvent::OnTreasureDead";} mapannounce "ordeal_1-1", "[Devil Square]: Parabéns guerreiros, vocês derrotaram todos ataques dos monstros. Agora começa a Caça ao Tesouro.", bc_all, "0x00FF00";} end; OnMobDead:if( mobcount("ordeal_1-1", "all") > 0 && $@ds_flag <= $@ds_horde )mapannounce "ordeal_1-1", "[Devil Square]: Faltam " + mobcount("ordeal_1-1", "all") + " monstros para a " + $@ds_round + "ª Square.",bc_all,"0x00FF00";else if( mobcount("ordeal_1-1", "all") > 0 )mapannounce "ordeal_1-1", "[Devil Square]: Faltam " + mobcount("ordeal_1-1", "all") + " monstros para eliminar a Devil Square.",bc_all,"0x00FF00";elsedonpcevent "DevilSquareEvent::OnStartArena";end; OnAssassinDead:mapannounce "ordeal_1-1", "[Devil Square]: O Jogador [ " + strcharinfo(0) + " ] matou o Monstro Assassino.", bc_all, "0x00FF00";donpcevent "DevilSquareEvent::OnMobDead";end; OnTreasureDead:mapannounce "ordeal_1-1", "[Devil Square]: O Jogador [ " + strcharinfo(0) + " ] abriu uma das Arcas do Tesouro.", bc_all, "0x00FF00"; while(1){set .@rand_1, rand(0, 2); if( .@rand_1 == 0 && $@ds_baseexp ){set BaseExp, BaseExp + $@ds_baseexp;break;}else if( .@rand_1 == 1 && $@ds_jobexp ){set JobExp, JobExp + 1;break;}else if( .@rand_1 == 2 && getarraysize($@ds_itemid) ){set .@rand, rand(0, (getarraysize($@ds_itemid)-1));getitem $@ds_itemid[.@rand], $@ds_itemqt[.@];break;}else if( !getarraysize($@ds_itemid) && !$@ds_baseexp && !$@ds_jobexp )break;} if( !mobcount("ordeal_1-1", "all") ){announce "[Devil Square]: Parabéns a todos guerreiros que venceram a lutaram contra os Monstros na Devil Square.", bc_all, "0x00FF00";donpcevent "DevilSquareWarp::OnEndArena";}end;} - script Devil Square#ds_02::DevilSquarePlayer -1,{ OnPlayerCheck:OnPCLogoutEvent:OnPCDieEvent:getmapxy(.@map$, .@x, .@y, 0); if( $@ds_flag == 2 && .@map$ == "ordeal_1-1" )initnpctimer;end; OnTimer6000:announce "[Devil Square]: Todos falharam na Devil Square, os Monstros sairam vitoriosos na " + ($@ds_round-1) + "ª Square.",bc_all,"0x00FF00";donpcevent "DevilSquareWarp::OnEndArena";stopnpctimer;end;} prontera,164,167,5 script Devil Square#ds_03::DevilSquareWarp 733,{ set .@adm_lvl, 99; mes "^483D8B[Recepcionista]^000000";mes "Bem-vindo a ^0000FFDevil Square^000000.";mes "^FF0000Se você falhar você morre!^000000"; if( !$@ds_flag )mes "No momemento nosso portal está fechado, por não estár no horário da batalha na Arena.";else if( $@ds_flag == 2 )mes "No momemento nosso portal está fechado por estar ocorrendo uma batalha na Arena."; mes "Em que posso ajudar?";next;switch( select((getgmlevel()>=.@adm_lvl?($@ds_flag?"^0000FF- Desligar a Devil Square.^000000":"^0000FF- Ligar a Devil Square.^000000"):""), ($@ds_flag==1?"^0000FF- Entrar na Devil Square.^000000":""), "- Informações.", "^FF0000- Saír.^000000") ){case 1:mes "^483D8B[Recepcionista]^000000"; if( $@ds_flag )mes "Deseja desligar a ^0000FFDevil Square^000000?";elsemes "Deseja ligar a ^0000FFDevil Square^000000?"; next;if( select("- Sim", "- Não.") == 1 ){if( !$@ds_flag )donpcevent "DevilSquareEvent::OnStart";elsedonpcevent "DevilSquareWarp::OnEnd";}break;case 2:if( $@ds_flag != 1 ){mes "^483D8B[Recepcionista]^000000"; mes "Me desculpe, mais a arena não está aberta."; mes "Volte mais tarde!";close;}else if( $@ds_baselevel && BaseLevel < $@ds_baselevel ){mes "^483D8B[Recepcionista]^000000";mes "Para entrar na ^0000FFDevil Square^000000, você deve ter o ^0000FFNível de Base^000000 ^FF000000" + $@ds_baselevel + "^000000 ou superior.";close;}else if( $@ds_zenycost && Zeny < $@ds_zenycost ){mes "^483D8B[Recepcionista]^000000";mes "Para entrar na ^0000FFDevil Square^000000, você precisa ter ^FF000000" + $@ds_zenycost + "^000000 Zenys.";close;}else if( $@ds_maxplayer && getmapusers("ordeal_1-1") >= $@ds_maxplayer ){mes "^483D8B[Recepcionista]^000000";mes "O limite de jogadores na ^0000FFDevil Square^000000 foi atingido, você não pode entrar na arena.";close;}else {mes "^483D8B[Recepcionista]^000000";mes "Realmente deseja entrar na arena?";next;if( select("- Sim.", "- Não.") == 1 ){mes "^483D8B[Recepcionista]^000000";mes "Tudo bem, vou te mandar para lá!";close2;if( $@ds_zenycost ) set Zeny, Zeny - $@ds_zenycost;warp "ordeal_1-1", 0, 0;end;}}break;case 3:mes "^483D8B[Recepcionista]^000000";mes "A ^0000FFDevil Square^000000 é uma arena que seguirá de ^FF0000" + $@ds_horde + "^000000 ^0000FFroundes^000000 em que são invocado hordas de monstros para os jogadores exterminar."; if( $@ds_baselevel )mes "Para entrar na ^0000FFDevil Square^000000, você deve ter o ^0000FFNível de Base^000000 ^FF0000" + $@ds_baselevel + "^000000 ou superior.";elsemes "Qualquer ^0000FFNível de Base^000000 é aceito na ^0000FFDevil Square^000000."; if( $@ds_zenycost )mes "Na entrada ^0000FFDevil Square^000000, será cobrado ^FF0000" + $@ds_zenycost + "^000000 Zenys.";elsemes "Não há custo para entrar na ^0000FFDevil Square^000000."; if( $@ds_maxplayer )mes "O limite de jogadores dentro da ^0000FFDevil Square^000000 é de ^FF0000" + $@ds_maxplayer + "^000000 jogadores.";elsemes "Não há limite de jogadores dentro da ^0000FFDevil Square^000000."; mes "Sua ^0000FFmissão^000000 é sobreviver todos os ^0000FFroundes^000000.";mes "Quando terminar os ^0000FFroundes^000000, aprece-rá as ^0000FFArcas do Tesouro^000000, no qual nela você pode ganhar:"; if( getarraysize($@ds_itemid) )mes "^FF0000- Itens.^000000";if( $@ds_baseexp )mes "^FF0000- Experiência de Base.^000000";if( $@ds_jobexp )mes "^FF0000- Experiência de Classe.^000000"; mes " ";mes "Preste muita atenção quando essas Arcas forem invocadas!";next;mes "^483D8B[Recepcionista]^000000";mes "A arena é aberta nos seguintes horários:";mes " ";mes "^0000FF09:00H^000000 - ^0000FF17:00H^000000";mes "^0000FF11:00H^000000 - ^0000FF19:00H^000000";mes "^0000FF13:00H^000000 - ^0000FF21:00H^000000";mes "^0000FF15:00H^000000 - ^0000FF23:00H^000000";close;case 4:break; } mes "^483D8B[Recepcionista]^000000"; mes "Muito bem, volte quando desejar entrar na ^0000FFArena Devil Square^000000!"; close; OnStartArena:waitingroom "Aberta a Devil Square", 0;end; OnEnd:// Segurançadelwaitingroom;stopnpctimer "DevilSquareEvent";announce "[Devil Square]: A Devil Square foi cancelada!", bc_all, "0x00FF00";donpcevent "DevilSquareWarp::OnEndArena";end; OnEndArena:killmonsterall "ordeal_1-1";// Removendo MapFlagsremovemapflag "ordeal_1-1", mf_nomemo; removemapflag "ordeal_1-1", mf_noteleport; removemapflag "ordeal_1-1", mf_nowarp; removemapflag "ordeal_1-1", mf_nowarpto; removemapflag "ordeal_1-1", mf_nomemo;removemapflag "ordeal_1-1", mf_nomobloot;removemapflag "ordeal_1-1", mf_nomvploot;removemapflag "ordeal_1-1", mf_noskill;set $@ds_flag, 0;initnpctimer;end; OnTimer6000:mapwarp "ordeal_1-1", "prontera", 154, 175;stopnpctimer;end; } ordeal_1-1,246,245,5 script Devil Square#ds_04 733,{ mes "^483D8B[Recepcionista da Saída]^000000";mes "Deseja retornar a Prontera?";next;if( select ("Sim.:Não.") == 1) {mes "^483D8B[Recepcionista da Saída]^000000";mes "Muito bem, boa viajem!";close2;if( $@ds_flag == 2 ) donpcevent "DevilSquarePlayer::OnPlayerCheck";warp "prontera", 154, 175;end;}mes "^483D8B[Recepcionista da Saída]^000000";mes "Você deve saír logo... ou pode ter grandes problemas...";close; OnInit:waitingroom "Devil Square Saída",0;end; }[\spoiler]
  15. Pessoal eu uso esse script para invocar os baús do tesouro nos castelos, porém estou com o seguinte problema sempre que preciso dar uma reiniciada no servidor ou ocorre da maquina reiniciar, os baús dos castelos dos clans que não recolheram ainda somem, alguém tem uma ideia para evitar isso, que eles não sumam se n tiverem sido mortos ou passado as 00:01 do outro dia? Qualquer ideia serve. [spolier] // Baús do Tesouro do Clã//-------------------------------------------------------------gefg_cas05,144,110,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas05 -1// Invocações da Sala do Tesouro//-------------------------------------------------------------- script Gld_Trea_Spawn::Gld_Trea_Spawn -1,{ end;OnClock0001: // Não fazer nada, se esse script é a estrutura. if (strnpcinfo(1) == "Gld_Trea_Spawn") end; set .@GID, getcastledata(strnpcinfo(2),1); // Não fazer nada, se o castelo não estiver ocupado. if (!.@GID) end; // Existe Economia no castelo? set .@Treasure,getcastledata(strnpcinfo(2),2)/5+4; // Inserindo informações if (strnpcinfo(2) == "aldeg_cas01") { set .@treasurebox,1324; setarray .@treasurex[0],115,122,115,122,116,117,118,119,120,121,121,121,121,121,121,120,119,118,117,116,116,116,116,116; setarray .@treasurey[0],226,226,219,219,225,225,225,225,225,225,224,223,222,221,220,220,220,220,220,220,221,222,223,224; } else if (strnpcinfo(2) == "aldeg_cas02") { set .@treasurebox,1326; setarray .@treasurex[0],134,135,135,134,132,133,134,135,136,137,137,137,137,137,137,136,135,134,133,132,132,132,132,132; setarray .@treasurey[0],231,231,230,230,233,233,233,233,233,233,232,231,230,229,228,228,228,228,228,228,229,230,231,232; } else if (strnpcinfo(2) == "aldeg_cas03") { set .@treasurebox,1328; setarray .@treasurex[0],224,225,225,224,222,223,224,225,226,227,227,227,227,227,227,226,225,224,223,222,222,222,222,222; setarray .@treasurey[0],269,269,268,268,271,271,271,271,271,271,270,269,268,267,266,266,266,266,266,266,267,268,269,270; } else if (strnpcinfo(2) == "aldeg_cas04") { set .@treasurebox,1330; setarray .@treasurex[0],84,85,85,84,82,83,84,85,86,87,87,87,87,87,87,86,85,84,83,82,82,82,82,82; setarray .@treasurey[0],13,13,12,12,15,15,15,15,15,15,14,13,12,11,10,10,10,10,10,10,11,12,13,14; } else if (strnpcinfo(2) == "aldeg_cas05") { set .@treasurebox,1332; setarray .@treasurex[0],61,62,62,61,59,60,61,62,63,64,64,64,64,64,64,63,62,61,60,59,59,59,59,59; setarray .@treasurey[0],12,12,11,11,14,14,14,14,14,14,13,12,11,10,9,9,9,9,9,9,10,11,12,13; } else if (strnpcinfo(2) == "gefg_cas01") { set .@treasurebox,1334; setarray .@treasurex[0],153,154,154,153,151,152,153,154,155,156,156,156,156,156,156,155,154,153,152,151,151,151,151,151; setarray .@treasurey[0],113,113,112,112,115,115,115,115,115,115,114,113,112,111,110,110,110,110,110,110,111,112,113,114; } else if (strnpcinfo(2) == "gefg_cas02") { set .@treasurebox,1336; setarray .@treasurex[0],139,140,140,139,137,138,139,140,141,142,142,142,142,142,142,141,140,139,138,137,137,137,137,137; setarray .@treasurey[0],115,115,114,114,117,117,117,117,117,117,116,115,114,113,112,112,112,112,112,112,113,114,115,116; } else if (strnpcinfo(2) == "gefg_cas03") { set .@treasurebox,1338; setarray .@treasurex[0],269,270,270,269,267,268,269,270,271,272,272,272,272,272,272,271,270,269,268,267,267,267,267,267; setarray .@treasurey[0],291,291,290,290,293,293,293,293,293,293,292,291,290,289,288,288,288,288,288,288,289,290,291,292; } else if (strnpcinfo(2) == "gefg_cas04") { set .@treasurebox,1340; setarray .@treasurex[0],115,116,116,115,113,114,115,116,117,118,118,118,118,118,118,117,116,115,114,113,113,113,113,113; setarray .@treasurey[0],119,119,118,118,121,121,121,121,121,121,120,119,118,117,116,116,116,116,116,116,117,118,119,120; } else if (strnpcinfo(2) == "gefg_cas05") { set .@treasurebox,1342; setarray .@treasurex[0],143,144,144,143,141,142,143,144,145,146,146,146,146,146,146,145,144,143,142,141,141,141,141,141; setarray .@treasurey[0],110,110,109,109,112,112,112,112,112,112,111,110,109,108,107,107,107,107,107,107,108,109,110,111; } else if (strnpcinfo(2) == "payg_cas01") { set .@treasurebox,1344; setarray .@treasurex[0],289,292,292,289,288,289,290,291,292,293,293,293,293,293,293,292,291,290,289,288,288,288,288,288; setarray .@treasurey[0],10,10,7,7,11,11,11,11,11,11,10,9,8,7,6,6,6,6,6,6,7,8,9,10; } else if (strnpcinfo(2) == "payg_cas02") { set .@treasurebox,1346; setarray .@treasurex[0],143,146,146,143,142,143,144,145,146,147,147,147,147,147,147,146,145,144,143,142,142,142,142,142; setarray .@treasurey[0],146,146,143,143,147,147,147,147,147,147,146,145,144,143,142,142,142,142,142,142,143,144,145,146; } else if (strnpcinfo(2) == "payg_cas03") { set .@treasurebox,1348; setarray .@treasurex[0],158,159,159,158,156,157,158,159,160,161,161,161,161,161,161,160,159,158,157,156,156,156,156,156; setarray .@treasurey[0],169,169,168,168,171,171,171,171,171,171,170,169,168,167,166,166,166,166,166,166,167,168,169,170; } else if (strnpcinfo(2) == "payg_cas04") { set .@treasurebox,1350; setarray .@treasurex[0],146,147,147,146,144,145,146,147,148,149,149,149,149,149,149,148,147,146,145,144,144,144,144,144; setarray .@treasurey[0],48,48,47,47,50,50,50,50,50,50,49,48,47,46,45,45,45,45,45,45,46,47,48,49; } else if (strnpcinfo(2) == "payg_cas05") { set .@treasurebox,1352; setarray .@treasurex[0],155,158,158,155,154,155,156,157,158,159,159,159,159,159,159,158,157,156,155,154,154,154,154,154; setarray .@treasurey[0],134,134,131,131,135,135,135,135,135,135,134,133,132,131,130,130,130,130,130,130,131,132,133,134; } else if (strnpcinfo(2) == "prtg_cas01") { set .@treasurebox,1354; setarray .@treasurex[0],10,11,11,10,8,9,10,11,12,13,13,13,13,13,13,12,11,10,9,8,8,8,8,8; setarray .@treasurey[0],209,209,208,208,211,211,211,211,211,211,210,209,208,207,206,206,206,206,206,206,207,208,209,210; } else if (strnpcinfo(2) == "prtg_cas02") { set .@treasurebox,1356; setarray .@treasurex[0],201,202,202,201,199,200,201,202,203,204,204,204,204,204,204,203,202,201,200,199,199,199,199,199; setarray .@treasurey[0],228,228,227,227,230,230,230,230,230,230,229,228,227,226,225,225,225,225,225,225,226,227,228,229; } else if (strnpcinfo(2) == "prtg_cas03") { set .@treasurebox,1358; setarray .@treasurex[0],187,188,188,187,185,186,187,188,189,190,190,190,190,190,190,189,188,187,186,185,185,185,185,185; setarray .@treasurey[0],132,132,131,131,134,134,134,134,134,134,133,132,131,130,129,129,129,129,129,129,130,131,132,133; } else if (strnpcinfo(2) == "prtg_cas04") { set .@treasurebox,1360; setarray .@treasurex[0],269,270,270,269,267,268,269,270,271,272,272,272,272,272,272,271,270,269,268,267,267,267,267,267; setarray .@treasurey[0],162,162,161,161,164,164,164,164,164,164,163,162,161,160,159,159,159,159,159,159,160,161,162,163; } else if (strnpcinfo(2) == "prtg_cas05") { set .@treasurebox,1362; setarray .@treasurex[0],275,276,276,275,273,274,275,276,277,278,278,278,278,278,278,277,276,275,274,273,273,273,273,273; setarray .@treasurey[0],178,178,177,177,180,180,180,180,180,180,179,178,177,176,175,175,175,175,175,175,176,177,178,179; } // Adicionar castelos personalizados aqui. else { end; } // Aplicar investimento nas Economias e Defesas. Só acontece se houver investimentos realizados. // Desenvolvimento permanente só deve acontecer uma vez por dia. if (getcastledata(strnpcinfo(2),4)) { set .@Economy,getcastledata(strnpcinfo(2),2); setcastledata strnpcinfo(2),2,.@Economy + getcastledata(strnpcinfo(2),4) + (rand(2) && getgdskilllv(.@GID,10014)); if (getcastledata(strnpcinfo(2),2) > 100) setcastledata strnpcinfo(2),2,100; } if (getcastledata(strnpcinfo(2),5)) { set .@defence,getcastledata(strnpcinfo(2),3); setcastledata strnpcinfo(2),3,.@defence + getcastledata(strnpcinfo(2),5); if (getcastledata(strnpcinfo(2),3) > 100) setcastledata strnpcinfo(2),3,100; } // Redefinição de limites de investimentos diários. setcastledata strnpcinfo(2),4,0; setcastledata strnpcinfo(2),5,0; // Invocar caixas do tesouro na ordem correta. for (set .@i,0; .@i < .@Treasure ; set .@i,.@i+1) { // set treasure box ID set .@boxid, .@treasurebox + (.@i+2) % 2; set .@box,1 << .@i; // Gerar ou não gerar baús existentes. if ((getd("$@"+strnpcinfo(2)+"_treasure") & .@box) == 0) { monster strnpcinfo(2),.@treasurex[.@i],.@treasurey[.@i],"Baú do Tesouro",.@boxid,1,"Treasure#"+strnpcinfo(2)+"::OnTreasureDied"+.@i; setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") | .@box; } } end;// Eventos individuais 'Você matou o Baú' para garantir invocações adequadas na mudança diária.OnTreasureDied0: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~1; end;OnTreasureDied1: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~2; end;OnTreasureDied2: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~4; end;OnTreasureDied3: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~8; end;OnTreasureDied4: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~16; end;OnTreasureDied5: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~32; end;OnTreasureDied6: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~64; end;OnTreasureDied7: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~128; end;OnTreasureDied8: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~256; end;OnTreasureDied9: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~512; end;OnTreasureDied10: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~1024; end;OnTreasureDied11: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~2048; end;OnTreasureDied12: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~4096; end;OnTreasureDied13: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~8192; end;OnTreasureDied14: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~16384; end;OnTreasureDied15: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~32768; end;OnTreasureDied16: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~65536; end;OnTreasureDied17: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~131072; end;OnTreasureDied18: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~262144; end;OnTreasureDied19: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~524288; end;OnTreasureDied20: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~1048576; end;OnTreasureDied21: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~2097152; end;OnTreasureDied22: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~4194304; end;OnTreasureDied23: setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~8388608; end;}[\spolier]