Jump to content

Geralt

Members
  • Posts

    108
  • Joined

  • Last visited

Posts posted by Geralt

  1. On 10/13/2019 at 11:46 PM, Emistry said:
    
    // https://rathena.org/board/topic/121239-prize-for-the-first-50/
    
    /* 
    CREATE TABLE IF NOT EXISTS `reward_for_first_50` (
    	`id` int(11) unsigned NOT NULL auto_increment,
    	`aid` int(11) unsigned NOT NULL default '0',
    	`cid` int(11) unsigned NOT NULL default '0',
    	`last_ip` varchar(100) NOT NULL default '',
    	`last_unique_id` varchar(100) NOT NULL default '',
    	`time` datetime NOT NULL,
    ) ENGINE=MyISAM;
    */
    
    prontera,0,0,0	script	Sample	444,{
    	.@aid = getcharid(3);
    	.@cid = getcharid(0);
    	.@ip$ = getcharip();
    	.@unique_id$ = get_unique_id();
    	
    	query_logsql("SELECT `id`,`time` FROM `reward_for_first_50` WHERE `aid` = "+.@aid+" OR `last_ip` = '"+escape_sql(.@ip$)+"' OR `last_unique_id` = '"+escape_sql(.@unique_id$)+"' LIMIT 1", .@id, .@time$);
    	query_logsql("SELECT COUNT(`id`) FROM `reward_for_first_50`", .@size);
    	if (.@size >= .max_redeem) {
    		mes "you missed the reward, only "+.max_redeem+" players got the reward.";
    	}
    	else if (.@id) {
    		mes "You've already claimed the rewards on "+.@time$+".";
    	}
    	else {
    		query_logsql("INSERT INTO `reward_for_first_50` (`aid`,`cid`,`last_ip`,`last_unique_id`,`time`) VALUES ("+.@aid+","+.@cid+",'"+escape_sql(.@ip$)+"','"+escape_sql(.@unique_id$)+"', NOW())");
    		getitem 501,1;
    		getitem 502,1;
    		getitem 503,1;
    		mes "you are the "+(.@size+1)+"/"+.max_redeem+" players who got the reward";
    	}
    	close;
    	
    	OnInit:
    		.max_redeem = 50;
    		end;
    }

    você pode tentar isso, menos variáveis usadas ou para manter o controle ou conflitos com outros. e deve ser compatível com todos os emuladores novos/antigos.

    - o antigo emulador pode ter problemas com a limitação do tamanho da matriz de 128, sem ter certeza de quais anos já foi levantado.

    @Emistry

    I'll take this topic to ask I'm having this error when inserting the sql table (1064)

    ) ENGINE = MyISAM;

  2. How to add Soul Reaper and Star Emperor classes and platinum skills

    //===== rAthena Script =======================================
    //= Job Master
    //===== By: ==================================================
    //= Euphy
    //===== Current Version: =====================================
    //= 1.4
    //===== Compatible With: ===================================== 
    //= rAthena Project
    //===== Description: =========================================
    //= A fully functional job changer.
    //===== Additional Comments: =================================
    //= 1.0 Initial script.
    //= 1.1 Fixed reset on Baby job change.
    //= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support.
    //= 1.3 Kagerou/Oboro added.
    //= 1.4 Rebellion added.
    //============================================================
    prontera,153,193,4    script    Mestra das Classes    484,{
    function Job_Menu;
        mes "^339966[ Mestra das Classes ]^000000";
        if (Class > 4049) {
            mes (gettime(3)>= 6&&gettime(3)<= 12?"Bom-dia":(gettime(3)>=13&&gettime(3)<=18?"Boa-tarde":"Boa-noite"))+", ^008aff"+strcharinfo(0)+"^000000 !";
            mes "Não há mais nada que eu possa fazer por você.";
            close;
        }
        if (checkfalcon() || checkcart() || checkriding() || ismounting()) {
            mes "Por favor você deve remover "+((checkfalcon())?"falcon":"")+((checkcart())?"cart":"")+((checkriding())?"Peco":"")+((ismounting())?"mount":"")+" para poder continuar.";
            close;
        }
        if (.SkillPointCheck && SkillPoint) {
            mes "Por favor use todos os pontos de skill para poder continuar..";
            close;
        }
        set .@eac, eaclass();
        set .@i, ((.ThirdClass)?roclass(.@eac&EAJ_UPPERMASK):Class);
        if (.@i > 6 && .@i < 22) {
            if (BaseLevel < .Rebirth[0] || JobLevel < .Rebirth[1]) {
                set .@blvl, .Rebirth[0]-BaseLevel; set .@jlvl, .Rebirth[1]-JobLevel;
                mes "Você precisa de "+((.@blvl>0)?.@blvl+" niveis de base "+((.@jlvl>0)?"/ ":""):"")+((.@jlvl>0)?.@jlvl+" niveis de job ":"")+"para continuar.";
                close;
            }
            if (Class > 21) {
                mes "Você deseja se tornar 3rd Classe?";
                next;
                Job_Menu(roclass(.@eac|EAJL_THIRD));
                close;
            }
            while(1) {
                mes "Selecione a opção:";
                next;
                set .@i, select(" ^3CB371[»]^000000 ^0055FFRenascer^000000:"+((.ThirdClass)?" [»] ^FF0000Terceira Classe^000000":"")+": ^777777[»] Cancelar^000000");
                if (.@i==3) close;
                mes "^339966[ Mestra das Classes ]^000000";
                mes "Você tem certeza?";
                next;
                Job_Menu(((.@i==1)?4001:roclass(.@eac|EAJL_THIRD)));
                mes "^339966[ Mestra das Classes ]^000000";
            }
        }
        set .@j1, roclass(.@eac|EAJL_2_1); set .@j2,roclass(.@eac|EAJL_2_2);
        if ((.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE) setarray .@exp[0],roclass(.@eac|EAJL_THIRD),99;
        //if (Class == Job_Ninja || Class == Job_Gunslinger) setarray .@exp[0],.@j1,70;
        if (.@exp[0] && .SecondExpanded) {
            if (BaseLevel < .Rebirth[0] || JobLevel < .@exp[1]) {
                set .@blvl, .Rebirth[0]-BaseLevel; set .@jlvl, .@exp[1]-JobLevel;
                mes "Você precisa de "+((.@blvl>0)?.@blvl+" niveis de base "+((.@jlvl>0)?"/ ":""):"")+((.@jlvl>0)?.@jlvl+" niveis de job ":"")+"para continuar.";
                close;
            }
            mes "Trocar para "+jobname(.@exp[0])+"?";
            next;
            Job_Menu(.@exp[0]);
            close;
        }
        if (.@eac&EAJL_2)
            if (.@eac&(EAJL_UPPER|EAJL_BABY) || roclass(.@eac|EAJL_UPPER) == -1) {
                mes "Não há mais classes disponiveis.";
                close;
            }
        if ((.@eac&EAJ_BASEMASK) == EAJ_NOVICE) {
            if (JobLevel < .JobReq[0])
                mes "É necessário o nivel de job "+.JobReq[0]+" para se tornar 1ª Classe.";
            else if (Class == 4001 && .LastJob && lastJob) {
                mes "Trocar de classe agora?";
                next;
                Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER));
            } else switch(Class) {
                case 0: Job_Menu(1,2,3,4,5,6,23,4046,24,25,4023);
                case 4001: Job_Menu(4002,4003,4004,4005,4006,4007);
                case 4023: Job_Menu(4024,4025,4026,4027,4028,4029,4045);
                default: mes "An error has occurred."; break;
            }
            close;
        }
        if (roclass(.@eac|EAJL_2_1) == -1 || roclass(.@eac|EAJL_2_2) == -1)
            mes "Não há mais classes disponiveis.";
        else if (!(.@eac&EAJL_2) && JobLevel < .JobReq[1])
            mes "É necessário o nivel de job "+.JobReq[1]+" para se tornar 2ª Classe.";
        else if (.LastJob && lastJob && (.@eac&EAJL_UPPER)) {
            mes "Trocar de classe agora?";
            next;
            Job_Menu(lastJob+4001);
        } else
            Job_Menu(.@j1,.@j2);
        close;
    function Job_Menu {
        while(1) {
            if (getargcount() > 1) {
                mes "Escolha uma profissão";
                set .@menu$,"";
                for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
                    set .@menu$, .@menu$+" ^3CB371[»]^000000 "+jobname(getarg(.@i))+":";
                set .@menu$, .@menu$+" ^777777[»] Cancelar^000000";
                next;
                set .@i, getarg(select(.@menu$)-1,0);
                if (!.@i) close;
                if ((.@i == 23 || .@i == 4045) && BaseLevel < .SNovice) {
                    mes "^339966[ Mestra das Classes ]^000000";
                    mes "É necessário o nivel de base "+.SNovice+" para se tornar um "+jobname(.@i)+".";
                    close;
                }
                mes "^339966[ Mestra das Classes ]^000000";
                mes "Você tem certeza?";
                next;
            } else
                set .@i, getarg(0);
            if (select(" ^3CB371[»]^000000 Trocar sua classe para ^0055FF"+jobname(.@i)+"^000000: ^777777[»] "+((getargcount() > 1)?"Voltar":"Cancelar")+"^000000") == 1) {
                mes "^339966[ Mestra das Classes ]^000000";
                mes "Você é agora um: "+callfunc("F_InsertArticle",jobname(.@i))+"!";
                if (.@i==4001 && .LastJob) set lastJob, Class;
                jobchange .@i;
                if (.@i==4001 || .@i==4023) resetlvl(1);
                specialeffect2 EF_ANGEL2; specialeffect2 EF_ELECTRIC;
                if (.Platinum) callsub Get_Platinum;
                close;
            }
            if (getargcount() == 1) return;
            mes "^339966[ Mestra das Classes ]^000000";
        }
        end;
    }
    Get_Platinum:
        skill 142,1,0;
        switch(BaseClass) {
            case 0: if (Class !=23) skill 143,1,0; break;
            case 1: skill 144,1,0; skill 145,1,0; skill 146,1,0; break;
            case 2: skill 157,1,0; break;
            case 3: skill 147,1,0; skill 148,1,0; break;
            case 4: skill 156,1,0; break;
            case 5: skill 153,1,0; skill 154,1,0; skill 155,1,0; break;
            case 6: skill 149,1,0; skill 150,1,0; skill 151,1,0; skill 152,1,0; break;
            default: break;
        }
        switch(BaseJob) {
            case 7: skill 1001,1,0; break;
            case 8: skill 1014,1,0; break;
            case 9: skill 1006,1,0; break;
            case 10: skill 1012,1,0; skill 1013,1,0; break;
            case 11: skill 1009,1,0; break;
            case 12: skill 1003,1,0; skill 1004,1,0; break;
            case 14: skill 1002,1,0; break;
            case 15: skill 1015,1,0; skill 1016,1,0; break;
            case 16: skill 1007,1,0; skill 1008,1,0; skill 1017,1,0; skill 1018,1,0; skill 1019,1,0; break;
            case 17: skill 1005,1,0; break;
            case 18: skill 238,1,0; break;
            case 19: skill 1010,1,0; break;
            case 20: skill 1011,1,0; break;
            default: break;
        }
        return;
    OnInit:
        setarray .Rebirth[0],99,50;    // Minimum base level, job level to rebirth OR change to third class
        setarray .JobReq[0],10,40;    // Minimum job level to turn into 1st class, 2nd class
        set .ThirdClass,0;        // Enable third classes? (1: yes / 0: no)
        set .SecondExpanded,0;        // Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion? (1: yes / 0: no)
        set .SNovice,45;        // Minimum base level to turn into Super Novice
        set .LastJob,1;            // Enforce linear class changes? (1: yes / 0: no)
        set .SkillPointCheck,1;        // Force player to use up all skill points? (1: yes / 0: no)
        set .Platinum,1;        // Get platinum skills automatically? (1: yes / 0: no)
        end;
    }
    
    
    //prontera,151,193,4    script    Removedor de Skills    872,{
    //-    script    Removedor de Skills    -1,{
    ////--
    //set .nome$,"^339966[ Removedor de Skill ]^000000"; //Nome do NPC
    ////--
    //mes .nome$;
    //mes (gettime(3)>= 6&&gettime(3)<= 12?"Bom-dia":(gettime(3)>=13&&gettime(3)<=18?"Boa-tarde":"Boa-noite"))+", ^008aff"+strcharinfo(0)+"^000000 !";
    //mes "Eu posso remover seus pontos de skill que estão sobrando.";
    //mes "Vou verificar quantos pontos de skill você tem.";
    //next;
    //mes .nome$;
    //set @skillPoints, skillPointCount();
    //mes "Você tem "+@skillPoints+" Pontos de Habilidade!";
    //next;
    //mes .nome$;
    //mes "^ff0000CUIDADO! Você só deve remover os pontos se realmente os mesmo estiverem sobrando. Antes de continuar, tente atualizar seu patch, se mesmo assim ainda existe pontos sobrando continue com o processo.^000000";
    //next;
    //mes .nome$;
    //mes "Deseja remover "+@skillPoints+" Pontos de Habilidade?";
    //if(select("^3CB371[»]^000000 Sim.:^ff0000[»]^000000 Nao") == 2) close;
    //mes .nome$;
    //mes "Então eu removerei seus pontos!";
    //next;
    //set SkillPoint,0;
    //mes "Seus ^FF0000Pontos de Habilidade^000000 foram removidos com sucesso.";
    //close;
    //}

     

  3. Guys I have this problem in my hosting cloud server centos 7 I can't connect emulator or enter the DB

    obs .. will it be necessary to format the machine and install everything again?

    Quote

    [Warning]: You are running rAthena with root privileges, it is not necessary.
    [Info]: Connect Character DB server.... (Character Server)

    : Can't connect to MySQL server on 'xxx.xx.xxx.xxx' (111)
    [Error]: Couldn't connect with username = 'rathena4444', password = 'egf0dumya6il@', host = 'xxx.xx.xxx.xxx', port = '3306', database = 'rathena4444_rag'
    [Debug]: at inter.cpp:942
    [Info]: Server uses 'select' as event dispatcher
    [Info]: Server supports up to '1024' concurrent connections.
    [Info]: Char Server IP Address : 'xxx.xx.xxx.xxx' -> 'xxx.xx.xxx.xxx'.
    [Info]: Map Server IP Address : 'xxx.xx.xxx.xxx' -> 'xxx.xx.xxx.xxx'.
    [Status]: Using SQL dbs: no
    [Info]: Logging item transactions to table 'picklog'.
    [Info]: Logging commands to table 'atcommandlog'.
    [Info]: Logging 'logmes' messages to table 'npclog'.
    [Info]: Logging Cash transactions to table 'cashlog'.
    [Info]: Logging Feeding items to table 'feedinglog'.
    [Info]: Connecting to the Map DB Server....
    [SQL]: Can't connect to MySQL server on 'xxx.xx.xxx.xxx' (111)
    [Error]: Couldn't connect with uname='rathena4444',passwd='egf0dumya6il@',host='xxx.xx.xxx.xxx',port='3306',database='rathena4444_rag'
    [Debug]: at map.cpp:4287
    [Debug]: at map.cpp:4289

     

  4. the doubt I have and the same tutorial for level max 255?
    if it is I already did it and it gave the same error now the base level I put ta 185 anyway this error

    [Warning]: pc_readdb_skilltree: Skill 5045's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5046's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5047's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5048's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5049's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5050's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5051's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5052's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5053's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5054's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5055's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5056's base level requirement 100 exceeds 
    job 4218's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5045's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5046's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5047's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5048's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5049's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5050's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5051's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5052's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5053's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5054's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5055's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Warning]: pc_readdb_skilltree: Skill 5056's base level requirement 100 exceeds 
    job 4220's max base level 0. Capping skill base level.
    [Status]: Done reading '6197' entries in 'db/re/skill_tree.txt'.
    [Status]: Done reading '0' entries in 'db/import/skill_tree.txt'.
    [Warning]: Class Rune Knight (4054) does not have a base exp table.
    [Warning]: Class Rune Knight (4054) does not have a job exp table.
    [Warning]: Class Warlock (4055) does not have a base exp table.
    [Warning]: Class Warlock (4055) does not have a job exp table.
    [Warning]: Class Ranger (4056) does not have a base exp table.
    [Warning]: Class Ranger (4056) does not have a job exp table.
    [Warning]: Class Arch Bishop (4057) does not have a base exp table.
    [Warning]: Class Arch Bishop (4057) does not have a job exp table.
    [Warning]: Class Mechanic (4058) does not have a base exp table.
    [Warning]: Class Mechanic (4058) does not have a job exp table.
    [Warning]: Class Guillotine Cross (4059) does not have a base exp table.
    [Warning]: Class Guillotine Cross (4059) does not have a job exp table.
    [Warning]: Class Rune Knight T (4060) does not have a base exp table.
    [Warning]: Class Rune Knight T (4060) does not have a job exp table.
    [Warning]: Class Warlock T (4061) does not have a base exp table.
    [Warning]: Class Warlock T (4061) does not have a job exp table.
    [Warning]: Class Ranger T (4062) does not have a base exp table.
    [Warning]: Class Ranger T (4062) does not have a job exp table.
    [Warning]: Class Arch Bishop T (4063) does not have a base exp table.
    [Warning]: Class Arch Bishop T (4063) does not have a job exp table.
    [Warning]: Class Mechanic T (4064) does not have a base exp table.
    [Warning]: Class Mechanic T (4064) does not have a job exp table.
    [Warning]: Class Guillotine Cross T (4065) does not have a base exp table.
    [Warning]: Class Guillotine Cross T (4065) does not have a job exp table.
    [Warning]: Class Royal Guard (4066) does not have a base exp table.
    [Warning]: Class Royal Guard (4066) does not have a job exp table.
    [Warning]: Class Sorcerer (4067) does not have a base exp table.
    [Warning]: Class Sorcerer (4067) does not have a job exp table.
    [Warning]: Class Minstrel (4068) does not have a base exp table.
    [Warning]: Class Minstrel (4068) does not have a job exp table.
    [Warning]: Class Wanderer (4069) does not have a base exp table.
    [Warning]: Class Wanderer (4069) does not have a job exp table.
    [Warning]: Class Sura (4070) does not have a base exp table.
    [Warning]: Class Sura (4070) does not have a job exp table.
    [Warning]: Class Genetic (4071) does not have a base exp table.
    [Warning]: Class Genetic (4071) does not have a job exp table.
    [Warning]: Class Shadow Chaser (4072) does not have a base exp table.
    [Warning]: Class Shadow Chaser (4072) does not have a job exp table.
    [Warning]: Class Royal Guard T (4073) does not have a base exp table.
    [Warning]: Class Royal Guard T (4073) does not have a job exp table.
    [Warning]: Class Sorcerer T (4074) does not have a base exp table.
    [Warning]: Class Sorcerer T (4074) does not have a job exp table.
    [Warning]: Class Minstrel T (4075) does not have a base exp table.
    [Warning]: Class Minstrel T (4075) does not have a job exp table.
    [Warning]: Class Wanderer T (4076) does not have a base exp table.
    [Warning]: Class Wanderer T (4076) does not have a job exp table.
    [Warning]: Class Sura T (4077) does not have a base exp table.
    [Warning]: Class Sura T (4077) does not have a job exp table.
    [Warning]: Class Genetic T (4078) does not have a base exp table.
    [Warning]: Class Genetic T (4078) does not have a job exp table.
    [Warning]: Class Shadow Chaser T (4079) does not have a base exp table.
    [Warning]: Class Shadow Chaser T (4079) does not have a job exp table.
    [Warning]: Class Rune Knight (4080) does not have a base exp table.
    [Warning]: Class Rune Knight (4080) does not have a job exp table.
    [Warning]: Class Rune Knight (4081) does not have a base exp table.
    [Warning]: Class Rune Knight (4081) does not have a job exp table.
    [Warning]: Class Royal Guard (4082) does not have a base exp table.
    [Warning]: Class Royal Guard (4082) does not have a job exp table.
    [Warning]: Class Royal Guard (4083) does not have a base exp table.
    [Warning]: Class Royal Guard (4083) does not have a job exp table.
    [Warning]: Class Ranger (4084) does not have a base exp table.
    [Warning]: Class Ranger (4084) does not have a job exp table.
    [Warning]: Class Ranger (4085) does not have a base exp table.
    [Warning]: Class Ranger (4085) does not have a job exp table.
    [Warning]: Class Mechanic (4086) does not have a base exp table.
    [Warning]: Class Mechanic (4086) does not have a job exp table.
    [Warning]: Class Mechanic (4087) does not have a base exp table.
    [Warning]: Class Mechanic (4087) does not have a job exp table.
    [Warning]: Class Baby Rune Knight (4096) does not have a base exp table.
    [Warning]: Class Baby Rune Knight (4096) does not have a job exp table.
    [Warning]: Class Baby Warlock (4097) does not have a base exp table.
    [Warning]: Class Baby Warlock (4097) does not have a job exp table.
    [Warning]: Class Baby Ranger (4098) does not have a base exp table.
    [Warning]: Class Baby Ranger (4098) does not have a job exp table.
    [Warning]: Class Baby Arch Bishop (4099) does not have a base exp table.
    [Warning]: Class Baby Arch Bishop (4099) does not have a job exp table.
    [Warning]: Class Baby Mechanic (4100) does not have a base exp table.
    [Warning]: Class Baby Mechanic (4100) does not have a base exp table.

     

    pc_readdb_job_exp: Number of columns 178 defined is too low for max level 185

  5. can someone do a ranking for this script appears in fluxcp

    // ===== SQL ================================
    // CREATE TABLE `gdt` (
    // `guild_id` int(11) unsigned NOT NULL auto_increment,
    // `tesouros` int(11) unsigned NOT NULL default '0',
    // `pontos` int(11) unsigned NOT NULL default '0',
    //  PRIMARY KEY  (`guild_id`)
    // ) TYPE=MyISAM
    
    
    // Warps
    
    arena_room.gat,99,25,0    warp    tesouro1    1,1,prt_are_in.gat,98,23
    prt_are_in.gat,97,30,0    warp    tesouro2    1,1,arena_room.gat,99,28
    prt_are_in.gat,142,13,0    warp    tesouro3    1,1,prt_are_in.gat,177,79
    prt_are_in.gat,177,74,0    warp    tesouro4    1,1,prt_are_in.gat,138,13
    prt_are_in.gat,55,13,0    warp    tesouro5    1,1,prt_are_in.gat,125,78
    prt_are_in.gat,125,74,0    warp    tesouro6    1,1,prt_are_in.gat,60,13
    arena_room.gat,99,88,0    warp    tesouro7    1,1,izlude.gat,128,222
    prt_are_in.gat,74,127,0    warp    tesouro8    1,1,prt_are_in.gat,98,10
    prt_are_in.gat,97,7,0    warp    tesouro9    1,1,prt_are_in.gat,74,129
    
    
    izlude,127,225,0    script    iz431    45,1,1,{
    
        if(getcharid(2) == 0){
        mes "[Guerra do Tesouro]";
        mes "Desculpe, mas você precisa de um clã para participar da guerra do tesouro.";
        close;
        }else{
        set @rand, rand(6);
            if(@rand == 0) warp "arena_room.gat",120,87;
            if(@rand == 1) warp "arena_room.gat",114,102;
            if(@rand == 2) warp "arena_room.gat",87,102;
            if(@rand == 3) warp "arena_room.gat",79,88;
            if(@rand == 4) warp "arena_room.gat",113,74;
            if(@rand == 5) warp "arena_room.gat",85,74;
        }
        end;
    }
    
    izlude.gat,130,258,0    duplicate(iz431)    iz431#iz432    45,1,1,{
    
    prt_are_in.gat,0,0,0    script    TesouroEvent::TesouroKill    -1,{
    
    
    OnKilled:
        Tesouro:
        set @check, query_sql("SELECT tesouros,pontos FROM gdt WHERE guild_id='"+getcharid(2)+"' LIMIT 1", @tesouros, @pontos);
        set @check_p, query_sql("SELECT charkill,pontokill FROM chargdt WHERE char_idd ='"+getcharid(0)+"' LIMIT 1", @charkill, @pontokill);
        if(@check == 1){
            set @tesouros, @tesouros + 1;
            set @pontos, @pontos + 150;
            query_sql("UPDATE gdt SET tesouros = '"+@tesouros+"' WHERE guild_id='"+getcharid(2)+"'");
            query_sql("UPDATE gdt SET pontos = '"+@pontos+"' WHERE guild_id='"+getcharid(2)+"'");
                if(@check_p == 1){
                set @charkill, @charkill + 1;
                set @pontokill, @pontokill + 15;
                query_sql("UPDATE chargdt SET charkill = '"+@charkill+"' WHERE char_idd = '"+getcharid(0)+"'");
                query_sql("UPDATE chargdt SET pontokill = '"+@pontokill+"' WHERE char_idd = '"+getcharid(0)+"'");
                }
                    if(@check_p == 0){
                    query_sql("INSERT INTO chargdt (char_idd,charkill,char_name,pontokill) VALUES ('"+getcharid(0)+"','1','"+strcharinfo(0)+"','15')");
                    }
        }else{
            query_sql("INSERT INTO gdt (guild_id,tesouros,pontos) VALUES ('"+getcharid(2)+"','1','150')");
                if(@check_p == 1){
                set @charkill, @charkill + 1;
                set @pontokill, @pontokill + 10;
                query_sql("UPDATE chargdt SET charkill = '"+@charkill+"' WHERE char_idd = '"+getcharid(0)+"'");
                query_sql("UPDATE chargdt SET pontokill = '"+@pontokill+"' WHERE char_idd = '"+getcharid(0)+"'");
                }
    
                    if(@check_p == 0){
                    query_sql("INSERT INTO chargdt (char_idd,charkill,char_name,pontokill) VALUES ('"+getcharid(0)+"','1','"+strcharinfo(0)+"','15')");
                    }
    
        }
            announce "Guerra do Tesouro: " +strcharinfo(0)+ " do Clã ["+ getguildname(getcharid(2)) +"] conquistou um dos baús.",0;
            end;
    
    }
    
    
    prt_are_in.gat,0,0,0    script    TesouroEvent::TesouroEvent    -1,{
    
    end;
    
    OnClock1245:
    OnClock1445:
    OnClock1645:
    OnClock1845:
    OnClock2045:
    OnClock2245:
    OnClock0045:
    OnClock0245:
    OnClock0445:
    OnClock0645:
    OnClock0845:
    OnClock1045:
    
    announce "Guerra do Tesouro: Os tesouros vão surgir a qualquer momento!",0;
    end;
    
    OnHour13:
    OnHour15:
    OnHour17:
    OnHour19:
    OnHour21:
    OnHour23:
    OnHour01:
    OnHour03:
    OnHour05:
    OnHour07:
    OnHour09:
    OnHour11:
    
    killmonsterall "prt_are_in.gat";
    
    set $@tesourocount, 1;
    
    announce "Guerra do Tesouro: Os tesouros acabaram de surgir!",0;
    
    set $@mob, 1324;
    monster "prt_are_in.gat",178,88,"Baú do Tesouro",$@mob,1,"TesouroKill::OnKilled";
    
    set $@mob, 1324;
    monster "prt_are_in.gat",126,88,"Baú do Tesouro",$@mob,1,"TesouroKill::OnKilled";
    
    set $@mob, 1324;
    monster "prt_are_in.gat",74,141,"Baú do Tesouro",$@mob,1,"TesouroKill::OnKilled";
    
    end;
    
    }
    
    //==== Ranking ================================================
    izlude,142,221,4    script    Rankings G.d.T    857,{
    
    //==== Nome do NPC ============================================
    set @nome$,"[Rankings G.d.T]";
    //=============================================================
        
        mes @nome$;
        mes "Olá "+strcharinfo(0)+".";
        mes "O que procura?";
        next;
        menu "Ver Rank WOT [Player-Guilda]",WOT_RANK;
    
    WOT_RANK:
    mes @nome$;
    mes "Qual exatamente?";
    next;
    menu "Rank do meu clã!",MEU_CLA,"Meus pontos de WOT",MEU_WOT,"As 10 melhores Guildas!",TOP_DEZ,"Os 10 melhores Players",RANK_PLAY;
    
    MEU_WOT:
    mes @nome$;
    query_sql("SELECT charkill,pontokill FROM chargdt WHERE char_idd ='"+getcharid(0)+"'", @charkill, @pontokill);
    if(@charkill == 0) {mes "Você precisa participar da WOT para conseguir os pontos. Não perca tempo!"; close; }
    if(@pontokill == 0) {
    mes "Pelo que vejo você esta sem pontos. Participe da WOT para conquistar mais pontos!";
    close;
    }else{
    mes strcharinfo(0)+ ", você tem ^FF0000" +@pontokill+ "^000000 ponto(s) para gastar e você já conquistou " +@charkill+" baús.";
    mes "Participe da WOT e conquiste mais pontos para você e seu clã! Os pontos você podera trocar por itens e utilitarios dentro do jogo.";
    close;
    }
    
    
    MEU_CLA:
    if(getcharid(2)==0) goto SEM_CLA;
    query_sql "SELECT tesouros,pontos FROM gdt WHERE guild_id='"+getcharid(2)+"' LIMIT 1", @tesouros, @pontuacao;
    mes "[Informante rFOX]";
    mes strcharinfo(0)+ ", seu clã possui ^FF0000" +@tesouros+ "^000000 tesouro(s), totalizando " +@pontuacao+ " pontos de WOT. Continue batalhando pelo seu clã!";
    close;
    
    SEM_CLA:
    mes "[Informante rFOX]";
    mes "Você não possui um Clã! Procure alguma guilda e junte-se a ela para se divertir na WOT!";
    close;
    
    TOP_DEZ:
    mes "[Informante rFOX]";
    mes "Este é nosso Ranking de WOT Guildas [TOP 10]";
    next;
    
    // consulta
    query_sql("SELECT guild_id,tesouros FROM gdt ORDER BY tesouros DESC LIMIT 10", @guild_id, @tesouros);
    dispbottom "Ranking WOT Guildas [TOP 10]";
            dispbottom " ";
            dispbottom "Posição <x> Nome <x> Tesouros Conquistados";
            dispbottom " ";
            for(set @i,0;@i<=9;set @i,@i+1) {
                dispbottom "["+(@i+1)+"] <x> "+ getguildname(@guild_id[@i]) +" <x> "+@tesouros[@i]+"";
            }
            close;
    
    RANK_PLAY:
            mes @nome$;
            mes "Este é nosso Ranking de WOT Players [TOP 10]";
            next;
            query_sql "SELECT char_idd,charkill,char_name FROM chargdt ORDER BY charkill DESC LIMIT 10",@char_idd,@charkill,@char_name$;
            dispbottom "Ranking WOT Players [TOP 10]";
            dispbottom " ";
            dispbottom "Posição <x> Nome do Player <x> Baús";
            dispbottom " ";
            for(set @i,0;@i<=9;set @i,@i+1) {
            dispbottom "["+(@i+1)+"] <x> "+@char_name$[@i]+" <x> "+@charkill[@i]+"";
            }
            close;
    
    
    }
    
    arena_room.gat    mapflag    nosave
    prt_are_in.gat    mapflag    nosave
    arena_room.gat    mapflag    noteleport
    prt_are_in.gat    mapflag    noteleport
    arena_room.gat    mapflag    nomemo
    prt_are_in.gat    mapflag    nomemo
    
    prt_are_in    mapflag    gvg
    arena_room    mapflag    gvg

     

  6.  

    guys how do i solve this syntax error

     

    1256632366_Semttulo.jpg.2b519325736273592153113714b507ef.jpg

     

    Quote

    CREATE TABLE IF NOT EXISTS `reward_for_first_50` (
        `id` int(11) unsigned NOT NULL auto_increment,
        `aid` int(11) unsigned NOT NULL default '0',
        `cid` int(11) unsigned NOT NULL default '0',
        `last_ip` varchar(100) NOT NULL default '',
        `last_unique_id` varchar(100) NOT NULL default '',
        `time` datetime NOT NULL,
        ) ENGINE=MyISAM;

     

  7. 15 minutes ago, sader1992 said:

    se mesmo depois da recarga da bandeira mapeada não é removido

    certifique-se de que não há onde mais a bandeira mapeando visando o mapa

    outros arquivos

    ou você pode desativar a bandeira do mapa usando um script com evento oninit no final de sua lista de scripts

    I don't know where to start the script

  8. 10 minutes ago, sader1992 said:

    quando você editar a bandeira do mapa recarregar os scripts

    use @mapflag comando para verificar quais sinalizadores de mapa estão no mapa em que você está.

    I checked with the command @mapflag appears as I can't use the skill on the map so I think noskill.txt isn't loading

    Sem título.jpg

  9. Guys at the castle of wot in izlude have a part that I can use skill and the other not
    example in
    arena_room I can use skill
    when I enter the rooms at prt_are_in I can't use

     

    my mapflag noskill

    Quote

    //Prontera Arena ===============
    //prt_are_in    mapflag    noskill

     

  10. Guys as I leave this method for server 255/70 status max: 190.
    example I want to put 70 defm
    to defrost the time is 5 to 7 seconds

     

    Status.cpp

    Quote

    case SC_FREEZE:
                sc_def = status->mdef*37 + status->luk*33;
                sc_def2 = status_get_lv(bl)*10 - status_get_lv(src)*10;
                tick_def2 = status_src->luk*-10; // Caster can increase final duration with luk

     

  11. 9 minutes ago, Chaos92 said:

    Você usou o Google Translate? Não consigo entender a pergunta. desconectar o quê? Você quer dizer logout? e o que deve ser atualizado ou inserido?

    yes

    I saw on a server who uses the vip ticket he disconnects from the server without needing the player to leave the game

     

    example in this description

    "^ FF0000Attention: ^ 000000 After using this ticket you will be automatically DISCONNECTED from the game so that the vip plan is activated or updated.",

  12. 28 minutes ago, nomade said:

    Não sei se entendi bem, mas o que você quer é colocar mais de um prêmio para ser entregue?

    Caso seja isso é só você seguir as instruições no script.

    
     // Itens Recompensa Diária (Max 128 dias):
        //   "<Zeny>|<Pontos>|<BaseExp>|<JobExp>|<itemID-1>|<quantidade-1>|<itemID-2>|<quantidade-2>...etc", // Dia 1
        //   "<Zeny>|<Pontos>|<BaseExp>|<JobExp>|<itemID-1>|<quantidade-1>|<itemID-2>|<quantidade-2>...etc"  // Dia 2
        //   ...;
        // Comprimento total de qualquer seqüência de dias deve ser 255 ou mais curto
        // * Se os jogadores sessão mais longa do que o último dia set, eles vão continuar a receber o último prêmio.
        setarray .Rewards$[1],
            "0,0,0,0,12259,20,ID DO ITEM, QUANTIDADE", 

    Espero ter ajudado.

    143 :        setarray '.'Cutins$[1],

  13. 12 minutes ago, nomade said:

    Não sei se entendi bem, mas o que você quer é colocar mais de um prêmio para ser entregue?

    Caso seja isso é só você seguir as instruições no script.

    
     // Itens Recompensa Diária (Max 128 dias):
        //   "<Zeny>|<Pontos>|<BaseExp>|<JobExp>|<itemID-1>|<quantidade-1>|<itemID-2>|<quantidade-2>...etc", // Dia 1
        //   "<Zeny>|<Pontos>|<BaseExp>|<JobExp>|<itemID-1>|<quantidade-1>|<itemID-2>|<quantidade-2>...etc"  // Dia 2
        //   ...;
        // Comprimento total de qualquer seqüência de dias deve ser 255 ou mais curto
        // * Se os jogadores sessão mais longa do que o último dia set, eles vão continuar a receber o último prêmio.
        setarray .Rewards$[1],
            "0,0,0,0,12259,20,ID DO ITEM, QUANTIDADE", 

    Espero ter ajudado.

    yes more than one item to be delivered I will try here

  14. guys how do i add one more item to the script?

    //===== Descrição: ========================================= 
    //= Um sistema de recompensa para os jogadores que jogam com mais frequência
    //============================================================
    
    -    script    LOGIN    -1,{
    OnWhisperGlobal:
    OnLoginCmnd:
    OnPCLoginEvent:
        if(.Rest) message strcharinfo(0),"[Recompensa Diária]: Para receber sua recompensa você deve permanecer conectado por "+  .Rest +" minutos";
        .@i = (gettime(7) * 365 * 24 * 60) + (gettime(8) * 24 * 60) + (gettime(3) * 60) +gettime(2);
        if(.@i >= (#LastDailyReward + .MinWait)){
            sleep2 1000 + .Rest * 60000;
            if(.@i < #LastDailyReward + .MaxWait){
                #DRewardCon += 1;
            } else { #DRewardCon = 1; }
            if(#DRewardCon >= getarraysize(.Rewards$)){
                if(.Reset){ #DRewardCon = 1; }
                else { .@g = getarraysize(.Rewards$)-1; }
            } else {    .@g = #DRewardCon;    }
            explode(.@XT$,.Rewards$[.@g],",");
            for(.@x = 0; .@x < getarraysize(.@XT$); .@x++){
                .@TT[.@x] = atoi(.@XT$[.@x]);
            }
            if(.Mode & 1 && .@TT[4] > 0){
                for(.@x = 4; .@x <= getarraysize(.@TT) - 1 ; .@x += 2){
                    .@itms[getarraysize(.@itms)] = .@TT[.@x];
                    .@qnts[getarraysize(.@qnts)] = .@TT[.@x + 1];
                }
                if(checkweight2(.@itms,.@qnts)){
                    for(.@x = 0; .@x < getarraysize(.@itms) && .@x < getarraysize(.@qnts); .@x++){
                        getitem  .@itms[.@x], .@qnts[.@x];
                    }
                } else {
                    message strcharinfo(0),"[Recompensa Diária]: Você está acima do peso permitido guarde seus equipamentos e relogue.";
                    if(#DRewardCon) #DRewardCon -= 1;
                    end;
                }
            }
            if(.Mode & 16){
                cutin .Cutins$[#DRewardCon],4;
            }
            if(.Mode & 2){
                if(.@TT[0]){
                    zeny += .@TT[0];
                    message strcharinfo(0),"[Recompensa Diária]: Você recebeu "+ .@TT[0] +"zeny";
                }
                if(.@TT[1]){
                    setd getd(.Points$[0]),getd(.Points$[0]) + .@TT[1];
                    message strcharinfo(0),"[Recompensa Diária]: Você recebeu "+ .@TT[1] +" "+.Points$[1];
                }
            }
            if(.Mode & 4 && (.@TT[3] || .@TT[4]))
                getexp .@TT[3], .@TT[4];
            if(.Mode & 8){
                for(.@x = 0; .@x < getarraysize(.BuffInfo); .@x += 4){
                    if(#DRewardCon % .BuffInfo[.@x + 1] == 0)
                        sc_start .BuffInfo[.@x], .BuffInfo[.@x + 2] * 60000, .BuffInfo[.@x + 3];
                }
            }
            message strcharinfo(0),"[Recompensa Diária]: Vôcê recebeu sua recompensa diária por logar "+callfunc("F_InsertPlural",#DRewardCon,"dia")+" consecutivos.";
            #LastDailyReward = .@i;
            @Login_Time = 0;
        } else {
            .@days = (#LastDailyReward + .MinWait - .@i)/60/24;
            .@hours = ((#LastDailyReward + .MinWait - .@i)/60)%24;
            .@mins = (#LastDailyReward + .MinWait - .@i)%60;
            message strcharinfo(0),"[Recompensa Diária]: Aguarde "+ ((.@days) ? .@days +" Dias, " : "") +""+ ((.@hours) ? .@hours +" Horas e " : "") +""+ ((.@mins) ? .@mins +" Minutos " : "") +"para receber sua nova recompensa.";
        }
    end;
    OnInit:
        // Configurações Básicas
        //   1: Item | 2: Pontos | 4: Exp  
        //   8: Ganha buffs por logar a cada x dias consecutivos
        //   16: Mostrar Cutim
        //     (a bit value, e.g. 3 = Items & Points from Multi)
        .Mode = 1;
    
        // Para desativar o comando ' @loginreward ' comentar as próximas linhas
        // * Comandos necessários para erro de digitação
        bindatcmd("recompensa"    ,"LOGIN::OnLoginCmnd",0,99);
    
        // Tempo em minutos para receber a Recompensa Diária
        //   Dia: 22*60 - 24*60
        //   Semana: 10080
        .MinWait = 1320;
    
        // Minutos para perder a Recompensa Consecutiva
        //   Dia: 48*60 - 50*60
        //   Semana: 20160
        .MaxWait = 3000;
    
        // Resetar
        //   [0] Repetir último dia
        //   [1] Resetar quando alcançar o útimo dia
        .Reset = 1;
    
        // Tempo online antes de receber a Recompensa
        .Rest = 0;
    
        // Tipos de Pontos
        //   [0] Pontos Ganhos
        //   [1] Nome do Ponto
        setarray .Points$,"#KAFRAPOINTS","K-Points";
    
        // Buffs por dias consecutivos
        // Cada Buff contém 4 variáveis (32 Total Max)
        // <Tipo>,<Dias>,<Duração>,<Rate>, // Buff 1
        // <Tipo>,<Dias>,<Duração>,<Rate>, // Buff 2
        //   ...;
        //
        //  Exemplo: 188,7,45,3
        //    - A cada 7 dias consecutivos o jogador irá ganhar +3 de STR por 45 minutos
        //
        //  Tipo 188 é, quais as referencias que SC_ vai usar, SC_INCSTR neste exemplo
        //     - Para uma lista completa de SC_ visite db/const.txt
        //  Dias é os dias de buff aplicado, neste exemplo 7, assim será a cada 7 dias, 14,21,28....
        //    Duração é a quantidade de tempo que o buff irá durar, neste exemplo 45 minutos
        //  Rate é o nível do buff, neste exemplo o player irá ganhar +3 Str
        setarray .BuffInfo
                    ,260,2,360,1    // Seguro de Vida por 360 Minutos, a cada 2 dias consecutivos
                    ,198,3,120,10    // +10% Hp por 120 Minutos, a cada 3 dias consecutivos
                    ,196,5,120,25    // +25 Flee por 120 Minutos, a cada 5 dias consecutivos
                    ,257,7,240,50;    // +50% Exp por 240 Minutos, a cada 7 dias consecutivos
    
        // Itens Recompensa Diária (Max 128 dias):
        //   "<Zeny>|<Pontos>|<BaseExp>|<JobExp>|<itemID-1>|<quantidade-1>|<itemID-2>|<quantidade-2>...etc", // Dia 1
        //   "<Zeny>|<Pontos>|<BaseExp>|<JobExp>|<itemID-1>|<quantidade-1>|<itemID-2>|<quantidade-2>...etc"  // Dia 2
        //   ...;
        // Comprimento total de qualquer seqüência de dias deve ser 255 ou mais curto
        // * Se os jogadores sessão mais longa do que o último dia set, eles vão continuar a receber o último prêmio.
        setarray .Rewards$[1],
            "0,0,0,0,12259,20", 
            "0,0,0,0,12259,20",
            "0,0,0,0,12259,20",
            "0,0,0,0,12259,20",
            "0,0,0,0,12259,20",
            "0,0,0,0,12259,20",
            "0,0,0,0,12259,20",
    
        // Cutin Array
        //    Mostra uma cutin para cada dia
        //    
        setarray .Cutins$[1],
                "dia01",
                "dia02",
                "dia03",
                "dia04",
                "dia05",
                "dia06",
                "dia07",
                "dia08",
                "dia09";
    end;
    }

     

  15. 17 hours ago, Chaos92 said:
    
    StateIconList[EFST_IDs.EFST_OVERLAPEXPUP] = {
        haveTimeLimit = 1,
        posTimeLimitStr = 2,
        descript = {
            { "Malangdo Cat Can", COLOR_TITLE_BUFF },
            { "%s", COLOR_TIME },
            { "When defeating monsters" },
            { "Increase Base Exp and JOB Exp rate received" },
            { "Increase item drop rate" }
        }
    }

    em seu GRF. dados/luafiles514/lua files/stateicon/stateiconinfo.lub

    my date is 2015 if i get stateiconinfo.lub 2018 right?

    said where it was more did not pass the solution

  16. when I use this item is provoke how to solve I don't know if the line is right

     

     

     

     

    12633,Malang_Cat_Can,Malangdo Cat Can,2,20,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus2 bExpAddRace,RC_All,10; bonus2 bDropAddRace,RC_All,20; }",1200,1,0,EFST_OVERLAPEXPUP; },{},{}

    Sem título.jpg

     

    description

    Special Malangdo production, canned so you can store it easily. It is known strangely for empowering people.
    DROP rate + 20%.
    EXP gained by monsters + 10%.
    It accumulates with other consumables of the same effect.
    Effect is removed when dying.
    Duration: 20 minutes
    Negotiation: Cannot be dropped, traded, placed on the cart or sold in NPC, but can be placed in the warehouse.
    Weight: 5

  17. Guys I had created another topic another section on voteforpoints. OK
    https://github.com/sanasol/FluxCP_Addons-VoteForPoints
    It worked fine but the npc does not record the points,

    example: I voted for topragnarok there
    inside the server it does not count the points is 0

     

    prontera,150,150,4    script    VFP Manager    62,{
        function getPoints;
    
        set .@n$,             "[VFP Manager]";
        set .@settings,     1;        // 0 = item, 1 = shop
        set .@itemReward,     501;    // if settings is set to item
        set .@convertRate,     2;        // 2 Vote Points for 1 Red Potion
        set .vp,             getPoints(getcharid(3));
        
        switch (.@settings) {
            case 0:
                mes .@n$;
                mes "Would you like to convert your "+ .vp +" Vote Points?";
                mes "^ff0000The current convert rate is "+ .@convertRate +" Vote Points for 1 "+ getitemname(.@itemReward) +".";
                next;
                menu "Yes", L_Convert, "No", -;
                mes .@n$;
                mes "Bye, then.";
                break;
            case 1:
                mes .@n$;
                mes "You have ^ff0000"+ .vp +"^000000 Vote Points.";
                mes "Would you like to go shopping?";
                next;
                menu "Yes", -, "No", L_Goodbye;
                mes .@n$;
                mes "Have fun shopping!";
                callshop "votepoints_shop",1;
                npcshopattach "votepoints_shop";
                end;
        }
        
        L_Goodbye:
            mes .@n$;
            mes "Goodbye, then.";
            close;
        
        L_Convert:
            if (.vp < .@convertRate)
                goto L_VotePointsTooLow;
            mes .@n$;
            mes "How much Vote Points would you like to convert?";
            next;
            menu "All", L_ConvertAll, "Input Amount", L_ConvertAmount;
        
        L_ConvertAmount:
            input .@convert;
            
            if (.@convert > .vp)
                goto L_VotePointsTooLow;
            
            set .vp, ((.vp - .@convert) + (.@convert % .@convertRate));
            set .@convert, (.@convert / .@convertRate);
            getitem .@itemReward, .@convert;
            query_sql("UPDATE cp_createlog SET votepoints = "+ .vp +" WHERE account_id = "+ getcharid(3));
            
            mes .@n$;
            mes "You have received "+ .@convert +"x "+ getitemname(.@itemReward) +".";
            mes "Your current Vote Points is "+ .vp;
            close;
            
        L_ConvertAll:
            set .@convert, (.vp / .@convertRate);
            set .vp, (.vp % .@convertRate);
            getitem .@itemReward, .@convert;
            query_sql("UPDATE cp_createlog SET votepoints = "+ .vp +" WHERE account_id = "+ getcharid(3));
            
            mes .@n$;
            mes "You have received "+ .@convert +"x "+ getitemname(.@itemReward) +".";
            mes "Your current Vote Points is "+ .vp;
            close;
        
        L_VotePointsTooLow:
            mes .@n$;
            mes "Your Vote Points is too low. Come back when you have the minimum amount of Vote Points.";
            close;
        
        function getPoints {
            set .@account_id, getarg(0);
            
            set .@count, query_sql("SELECT votepoints FROM cp_createlog WHERE account_id = "+ .@account_id, .@votepoints);
            
            return .@count ? .@votepoints : 0;
        }
        
        OnBuyItem:
            set .@cost,0;
            for(set .@i,0; .@i<getarraysize(@bought_nameid); set .@i,.@i+1)
                for(set .@j,0; .@j<getarraysize(.itemShop); set .@j,.@j+2)
                    if (@bought_nameid[.@i] == .itemShop[.@j]) {
                        set .@cost, .@cost+(.itemShop[.@j+1]*@bought_quantity[.@i]);
                        break;
                    }
            mes .@n$;
            if (.@cost > .vp) mes "You don't have enough Vote Points.";
            else {
                for(set .@i,0; .@i<getarraysize(@bought_nameid); set .@i,.@i+1) {
                    getitem @bought_nameid[.@i], @bought_quantity[.@i];
                    dispbottom "Purchased "+@bought_quantity[.@i]+"x "+getitemname(@bought_nameid[.@i])+".";
                }
                set .vp, .vp - .@cost;
                query_sql("UPDATE cp_createlog SET votepoints = votepoints - "+ .@cost +" WHERE account_id = "+ getcharid(3));
                mes .@n$;
                mes "Deal completed.";
                mes "You now have ^ff0000"+ .vp +"^000000 Vote Points.";
                emotion e_cash;
            }
            set .@cost,0;
            deletearray @bought_nameid[0], getarraysize(@bought_nameid);
            deletearray @bought_quantity[0], getarraysize(@bought_quantity);
            close;
        
        OnInit:
            setarray .itemShop[0],    501,2,607,5; // <ITEM_ID>,<PRICE>,...
            
            npcshopdelitem "votepoints_shop",512;
            for(set .@i, 0; .@i < getarraysize(.itemShop); set .@i, .@i+2)
                npcshopadditem "votepoints_shop", .itemShop[.@i], .itemShop[.@i+1];
        end;
    }
    
    -    shop    votepoints_shop    -1,512:-1
×
×
  • Create New...