Jump to content

Kingswim Snow

Members
  • Posts

    1
  • Joined

  • Last visited

Everything posted by Kingswim Snow

  1. // Advance Punching Bag with Parameter settings // by pajodex // Video preview : https://www.youtube.com/watch?v=RoLhYx-Iny8 vip_lounge,120,234,4 script Mudar Atributos#0 858,{ function get_size_name; function get_race_name; function get_ele_name; ignoretimeout 1; mes "Informações atuais do saco de pancadas:"; .@dupid = atoi(strnpcinfo(2)); getunitdata .gid[.@dupid], .@data; mes "Tamanho: "+ get_size_name(.@data[UMOB_SIZE]); mes "Nível: "+ .@data[UMOB_LEVEL]; mes "Raça: "+ get_race_name(.@data[UMOB_RACE]); mes "Elemento: "+ get_ele_name(.@data[UMOB_ELETYPE]) +" Nv. "+ .@data[UMOB_ELELEVEL]; mes "Status:"; mes "======================="; mes "STR: "+ .@data[UMOB_STR] +" AGI: "+ .@data[UMOB_AGI] +" VIT: "+ .@data[UMOB_VIT]; mes "INT: "+ .@data[UMOB_INT] +" DEX: "+ .@data[UMOB_DEX] +" LUK: "+ .@data[UMOB_LUK]; mes "Defesa: "+ .@data[UMOB_DEF] +" Defesa Mágica: "+ .@data[UMOB_MDEF]; next; if ( select("> Configurar Parâmetros:Cancelar") == 2 ) { mes "Até mais."; close; } do { mes "Selecione o parâmetro que deseja alterar."; next; switch(select("> Tamanho [ ^ff0000"+(.@size_select ? get_size_name(.@UMOB_SIZE):get_size_name(.UMOB_SIZE))+"^000000 ]:> Nível [ ^ff0000"+(.@UMOB_LEVEL ? .@UMOB_LEVEL:.UMOB_LEVEL)+"^000000 ]:> Raça [ ^ff0000"+(.@race_select ? get_race_name(.@UMOB_RACE):get_race_name(.UMOB_RACE))+"^000000 ]:> Elemento [ ^ff0000"+(.@ele_select ? get_ele_name(.@UMOB_ELETYPE):get_ele_name(.UMOB_ELETYPE))+" Nv "+(.@UMOB_ELELEVEL ? .@UMOB_ELELEVEL:.UMOB_ELELEVEL)+"^000000 ]:> Status:> Inserir ID do Monstro [ ^ff0000"+(.val ? getmonsterinfo(.val, MOB_NAME) : "Dummy")+"^000000 ]:^0000ffConcluir^000000")) { case 1: .@UMOB_SIZE = select("- Pequeno:- Médio:- Grande")-1; set .@size_select, true; break; case 2: mes "Insira o nível (1-"+.maxlv+"):"; next; input .@UMOB_LEVEL, 1, .maxlv; break; case 3: .@UMOB_RACE = select("- Amorfo:- Morto-vivo:- Bruto:- Planta:- Inseto:- Peixe:- Demônio:- Humanóide:- Anjo:- Dragão:- Jogador") - 1; set .@race_select, true; break; case 4: mes "Selecione o elemento:"; next; .@UMOB_ELETYPE = select("- Neutro:- Água:- Terra:- Fogo:- Vento:- Veneno:- Sagrado:- Sombrio:- Fantasma:- Morto-vivo") - 1; set .@ele_select, true; mes "Selecione o nível do elemento:"; next; .@UMOB_ELELEVEL = select("Nv 1:Nv 2:Nv 3:Nv 4"); break; case 5: mes "Selecione:"; next; switch(select("> STR [ ^ff0000"+(.@UMOB_STR ? .@UMOB_STR:.UMOB_STR)+"^000000 ]:> AGI [ ^ff0000"+(.@UMOB_AGI ? .@UMOB_AGI:.UMOB_AGI)+"^000000 ]:> VIT [ ^ff0000"+(.@UMOB_VIT ? .@UMOB_VIT:.UMOB_VIT)+"^000000 ]:> INT [ ^ff0000"+(.@UMOB_INT ? .@UMOB_INT:.UMOB_INT)+"^000000 ]:> DEX [ ^ff0000"+(.@UMOB_DEX ? .@UMOB_DEX:.UMOB_DEX)+"^000000 ]:> LUK [ ^ff0000"+(.@UMOB_LUK ? .@UMOB_LUK:.UMOB_LUK)+"^000000 ]:> DEF [ ^ff0000"+(.@UMOB_DEF ? .@UMOB_DEF:.UMOB_DEF)+"^000000 ]:> MDEF [ ^ff0000"+(.@UMOB_MDEF ? .@UMOB_MDEF:.UMOB_MDEF)+"^000000 ]")) { case 1: .@data$ = "STR"; break; case 2: .@data$ = "AGI"; break; case 3: .@data$ = "VIT"; break; case 4: .@data$ = "INT"; break; case 5: .@data$ = "DEX"; break; case 6: .@data$ = "LUK"; break; case 7: .@data$ = "DEF"; break; case 8: .@data$ = "MDEF"; break; } mes "Insira o valor (1-"+.max_stat+"):"; next; input .val, 1, .max_stat; setd ".@UMOB_"+.@data$, .val; break; case 6: mes "Insira o ID do monstro para simulação:"; next; input .val; if ( (.@name_english$ = getmonsterinfo(.val, MOB_NAME)) == "null" ) { mes "Não foi possível encontrar o ID do monstro "+.val+" na base de dados!"; next; break; } query_sql("SELECT `element_level` FROM `"+(checkre(0) ? "mob_db_re":"mob_db")+"` WHERE `id` = '"+.val+"'", .UMOB_ELELEVEL); .UMOB_LEVEL = getmonsterinfo(.val, MOB_LV); .UMOB_SIZE = getmonsterinfo(.val, MOB_SIZE); .UMOB_RACE = getmonsterinfo(.val, MOB_RACE); .UMOB_ELETYPE = getmonsterinfo(.val, MOB_ELEMENT); .UMOB_DEF = getmonsterinfo(.val, MOB_DEF); .UMOB_MDEF = getmonsterinfo(.val, MOB_MDEF); .UMOB_STR = getmonsterinfo(.val, MOB_STR); .UMOB_AGI = getmonsterinfo(.val, MOB_AGI); .UMOB_VIT = getmonsterinfo(.val, MOB_VIT); .UMOB_INT = getmonsterinfo(.val, MOB_INT); .UMOB_DEX = getmonsterinfo(.val, MOB_DEX); .UMOB_LUK = getmonsterinfo(.val, MOB_LUK); mes "Dados do monstro '"+.@name_english$+" ("+.val+")' aplicados ao saco de pancadas."; next; break; default: // Finalizar .@done = true; break; } } while ( !.@done ); mes "Reveja as configurações antes de invocar:"; mes "Tamanho: " + get_size_name((.@size_select ? .@UMOB_SIZE : .UMOB_SIZE)); mes "Nível: " + (.@UMOB_LEVEL ? .@UMOB_LEVEL : .UMOB_LEVEL); mes "Raça: " + get_race_name((.@race_select ? .@UMOB_RACE : .UMOB_RACE)); mes "Elemento: " + get_ele_name((.@ele_select ? .@UMOB_ELETYPE : .UMOB_ELETYPE)) + " Nv. " + (.@UMOB_ELELEVEL ? .@UMOB_ELELEVEL : .UMOB_ELELEVEL); mes "Status:"; mes "======================="; mes "STR: " + (.@UMOB_STR ? .@UMOB_STR : .UMOB_STR) + " AGI: " + (.@UMOB_AGI ? .@UMOB_AGI : .UMOB_AGI) + " VIT: " + (.@UMOB_VIT ? .@UMOB_VIT : .UMOB_VIT); mes "INT: " + (.@UMOB_INT ? .@UMOB_INT : .UMOB_INT) + " DEX: " + (.@UMOB_DEX ? .@UMOB_DEX : .UMOB_DEX) + " LUK: " + (.@UMOB_LUK ? .@UMOB_LUK : .UMOB_LUK); mes "Defesa: " + (.@UMOB_DEF ? .@UMOB_DEF : .UMOB_DEF) + " Defesa Mágica: " + (.@UMOB_MDEF ? .@UMOB_MDEF : .UMOB_MDEF); next; if (select("> Finalizar!:> Cancelar") == 2) close; mes "Feito!"; close2; // Aplica os valores configurados .UMOB_SIZE = (.@size_select) ? .@UMOB_SIZE : .UMOB_SIZE; .UMOB_LEVEL = (.@UMOB_LEVEL) ? .@UMOB_LEVEL : .UMOB_LEVEL; .UMOB_RACE = (.@race_select) ? .@UMOB_RACE : .UMOB_RACE; .UMOB_ELETYPE = (.@ele_select) ? .@UMOB_ELETYPE : .UMOB_ELETYPE; .UMOB_ELELEVEL = (.@UMOB_ELELEVEL) ? .@UMOB_ELELEVEL : .UMOB_ELELEVEL; .UMOB_STR = (.@UMOB_STR) ? .@UMOB_STR : .UMOB_STR; .UMOB_AGI = (.@UMOB_AGI) ? .@UMOB_AGI : .UMOB_AGI; .UMOB_VIT = (.@UMOB_VIT) ? .@UMOB_VIT : .UMOB_VIT; .UMOB_INT = (.@UMOB_INT) ? .@UMOB_INT : .UMOB_INT; .UMOB_DEX = (.@UMOB_DEX) ? .@UMOB_DEX : .UMOB_DEX; .UMOB_LUK = (.@UMOB_LUK) ? .@UMOB_LUK : .UMOB_LUK; .UMOB_DEF = (.@UMOB_DEF) ? .@UMOB_DEF : .UMOB_DEF; .UMOB_MDEF = (.@UMOB_MDEF) ? .@UMOB_MDEF : .UMOB_MDEF; // Remove o monstro anterior e invoca o novo com os parâmetros configurados killmonster strnpcinfo(4), strnpcinfo(0) + "::OnMyMobDead"; donpcevent strnpcinfo(0) + "::OnMyMobDead"; end; OnInit: // Configurações padrão no início .maxlv = 99; // Nível máximo permitido .max_stat = 999; // Status máximo permitido .UMOB_MAXHP = 2000000000; // HP máximo (não alterar sem entender o impacto) .UMOB_SIZE = 1; .UMOB_LEVEL = 10; .UMOB_RACE = 3; .UMOB_ELETYPE = 1; .UMOB_ELELEVEL = 1; .UMOB_STR = 5; .UMOB_AGI = 5; .UMOB_VIT = 5; .UMOB_INT = 5; .UMOB_DEX = 5; .UMOB_LUK = 5; .UMOB_DEF = 10; .UMOB_MDEF = 10; OnMyMobDead: // Reinvoca o monstro ao morrer getunitdata(getnpcid(0), .@d); if(getmonsterinfo(.val, MOB_NAME) == "null"){set .val, 0;} monster strnpcinfo(4), .@d[UNPC_X]-1, .@d[UNPC_Y]+1, (.val ? getmonsterinfo(.val, MOB_NAME) : "Dummy"), (!checkre(0)) ? 1905 : 2411, 1, strnpcinfo(0) + "::OnMyMobDead",0; .@dupid = atoi(strnpcinfo(2)); .gid[.@dupid] = $@mobid[0]; .mhp[.@dupid] = .UMOB_MAXHP; setunitdata .gid[.@dupid], UMOB_MODE, .@d[UMOB_MODE] | 0x4000000 | 0x0200000; // Define imunidade a status especiais setunitdata .gid[.@dupid], UMOB_MAXHP, .UMOB_MAXHP; setunitdata .gid[.@dupid], UMOB_SIZE, .UMOB_SIZE; setunitdata .gid[.@dupid], UMOB_LEVEL, .UMOB_LEVEL; setunitdata .gid[.@dupid], UMOB_RACE, .UMOB_RACE; setunitdata .gid[.@dupid], UMOB_ELETYPE, .UMOB_ELETYPE; setunitdata .gid[.@dupid], UMOB_ELELEVEL, .UMOB_ELELEVEL; setunitdata .gid[.@dupid], UMOB_STR, .UMOB_STR; setunitdata .gid[.@dupid], UMOB_AGI, .UMOB_AGI; setunitdata .gid[.@dupid], UMOB_VIT, .UMOB_VIT; setunitdata .gid[.@dupid], UMOB_INT, .UMOB_INT; setunitdata .gid[.@dupid], UMOB_DEX, .UMOB_DEX; setunitdata .gid[.@dupid], UMOB_LUK, .UMOB_LUK; setunitdata .gid[.@dupid], UMOB_DEF, .UMOB_DEF; setunitdata .gid[.@dupid], UMOB_MDEF, .UMOB_MDEF; setunitdata .gid[.@dupid], UMOB_CLASS, (.val ? .val : 1905); initnpctimer; end; OnTimer5000: // Atualiza as informações do saco de pancadas a cada 5 segundos .@dupid = atoi(strnpcinfo(2)); if (unitexists(.gid[.@dupid])) { getunitdata(.gid[.@dupid], .@d); .@diff = (.mhp[.@dupid] - .@d[UMOB_HP]); if (.@diff > 0) { npctalk "Dummy: Recebi " + F_InsertComma(.@diff / 5) + " DPS nos últimos 5 segundos."; setunitdata .gid[.@dupid], UMOB_HP, .mhp[.@dupid]; specialeffect EF_HEAL; } } initnpctimer; function get_size_name { switch ( getarg(0) ) { case 0 : .val$ = "Pequeno"; break; case 1 : .val$ = "Médio"; break; case 2 : .val$ = "Grande"; break; } return .val$; } function get_race_name { switch ( getarg(0) ) { case 0: .val$ = "Amorfo"; break; case 1: .val$ = "Morto-Vivo"; break; case 2: .val$ = "Bruto"; break; case 3: .val$ = "Planta"; break; case 4: .val$ = "Inseto"; break; case 5: .val$ = "Peixe"; break; case 6: .val$ = "Demônio"; break; case 7: .val$ = "Humanóide"; break; case 8: .val$ = "Anjo"; break; case 9: .val$ = "Dragão"; break; case 10: .val$ = "Jogador"; break; } return .val$; } function get_ele_name { switch ( getarg(0) ) { case 0: .val$ = "Neutro"; break; case 1: .val$ = "Água"; break; case 2: .val$ = "Terra"; break; case 3: .val$ = "Fogo"; break; case 4: .val$ = "Vento"; break; case 5: .val$ = "Veneno"; break; case 6: .val$ = "Sagrado"; break; case 7: .val$ = "Sombrio"; break; case 8: .val$ = "Fantasma"; break; case 9: .val$ = "Morto-Vivo"; break; } return .val$; } } vip_lounge,110,234,4 duplicate(Mudar Atributos#0) Mudar Atributos#1 858 vip_lounge,110,245,4 duplicate(Mudar Atributos#0) Mudar Atributos#2 858 vip_lounge,120,245,4 duplicate(Mudar Atributos#0) Mudar Atributos#3 858 Venho compartilhar as mudanças que eu realizei no NPC, poderia incluir em alguma próxima atualização - Quando seleciona o id do mob, o Punching Bag fica com o nome e sprite do mob. - Realizei uma correção onde não pegava todos atributos do mob(No meu amulador). - Realizei a tradução para pt-br. Muito obrigado pelo código, ficou muito bom!!!
×
×
  • Create New...