Jump to content
  • 0

npc voteforpoints does not record points


Question

Posted (edited)

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
Edited by Akkarin
Please use codebox for code instead of quotes /no1

10 answers to this question

Recommended Posts

  • 0
Posted
On 4/14/2020 at 12:23 PM, Sanasol said:

https://github.com/sanasol/FluxCP_Addons-VoteForPoints/blob/master/config/addon.php#L4

 

Do you use vote option here?

 

NPC only works in this case i guess ?

I used vote option. I tried to vote 

upon checking cp_createlog. It appears to still be empty. that is why the NPC doesn't retrieve anything so what I need was 

 I tried to insert values manually making sure to populate the accound_id then i tried to vote again using the account_id. After checking votepoints has been added.

I think the issue maybe due to the lack of insert function for vote? I'm really not sure

 

  • 0
Posted (edited)
On 5/10/2020 at 10:45 AM, darking123 said:

I used vote option. I tried to vote 

upon checking cp_createlog. It appears to still be empty. that is why the NPC doesn't retrieve anything so what I need was 

 I tried to insert values manually making sure to populate the accound_id then i tried to vote again using the account_id. After checking votepoints has been added.

I think the issue maybe due to the lack of insert function for vote? I'm really not sure

 

Alright! This is how i fixed the issue regarding not updating SQL.

 

Make sure your using the "vote":
Locate: addons\voteforpoints\config\addon.php

'PointsType'			=> "vote", // credit, vote, cash



What i did was creating a new table, which is "cp_v4p_voters"

SQL Table: (Execute this query)

CREATE TABLE `cp_v4p_voters` (
  `account_id` int(10) unsigned NOT NULL,
  `votepoints` int(10) unsigned NOT NULL,
  PRIMARY KEY (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

First removed the existing one:
 

							case "vote":
                                // update votepoints
                                $sql = "UPDATE $server->loginDatabase.cp_createlog SET votepoints = votepoints + ? WHERE account_id = ?";
                                $sth = $server->connection->getStatement($sql);
                                $sth->execute(array((int) $res->votepoints, $account_id));
                                break;

 

And Insert this: (Locate)

addons\voteforpoints\modules\voteforpoints\index.php

							case "vote":
							// update votepoints
							$sql = "UPDATE $server->loginDatabase.cp_v4p_voters SET votepoints = votepoints + ? WHERE account_id = ?";
							$sth = $server->connection->getStatement($sql);
							$sth->execute(array((int) $res->votepoints, $account_id));
								if ( ! $sth->rowCount())
								{
									$sql = "INSERT INTO $server->loginDatabase.cp_v4p_voters VALUES (?, ?)";
									$sth = $server->connection->getStatement($sql);
									$bind = array($account_id, $res->votepoints);
									$sth->execute($bind);

								if ( ! $sth->rowCount())
									$errorMessage = sprintf(Flux::message("UnableToVote"), 3);
                                } else {
                                    $sql = "UPDATE $server->loginDatabase.cp_v4p_voters SET `value` = `value` + ? WHERE `key` = ? AND account_id = ?";
                                    $sth = $server->connection->getStatement($sql);
									$sth->execute(array((int) $res->votepoints, $account_id));
                                }
                                break;

 

PROOF it works .

Capture.PNG.80838874b86abfeba361e4e6086e21eb.PNG

Edited by Royr
  • 0
Posted
On 11/11/2020 at 9:27 PM, Royr said:

Alright! This is how i fixed the issue regarding not updating SQL.

 

Make sure your using the "vote":
Locate: addons\voteforpoints\config\addon.php


'PointsType'			=> "vote", // credit, vote, cash



What i did was creating a new table, which is "cp_v4p_voters"

SQL Table: (Execute this query)


CREATE TABLE `cp_v4p_voters` (
  `account_id` int(10) unsigned NOT NULL,
  `votepoints` int(10) unsigned NOT NULL,
  PRIMARY KEY (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

First removed the existing one:
 


							case "vote":
                                // update votepoints
                                $sql = "UPDATE $server->loginDatabase.cp_createlog SET votepoints = votepoints + ? WHERE account_id = ?";
                                $sth = $server->connection->getStatement($sql);
                                $sth->execute(array((int) $res->votepoints, $account_id));
                                break;

 

And Insert this: (Locate)

addons\voteforpoints\modules\voteforpoints\index.php


							case "vote":
							// update votepoints
							$sql = "UPDATE $server->loginDatabase.cp_v4p_voters SET votepoints = votepoints + ? WHERE account_id = ?";
							$sth = $server->connection->getStatement($sql);
							$sth->execute(array((int) $res->votepoints, $account_id));
								if ( ! $sth->rowCount())
								{
									$sql = "INSERT INTO $server->loginDatabase.cp_v4p_voters VALUES (?, ?)";
									$sth = $server->connection->getStatement($sql);
									$bind = array($account_id, $res->votepoints);
									$sth->execute($bind);

								if ( ! $sth->rowCount())
									$errorMessage = sprintf(Flux::message("UnableToVote"), 3);
                                } else {
                                    $sql = "UPDATE $server->loginDatabase.cp_v4p_voters SET `value` = `value` + ? WHERE `key` = ? AND account_id = ?";
                                    $sth = $server->connection->getStatement($sql);
									$sth->execute(array((int) $res->votepoints, $account_id));
                                }
                                break;

 

PROOF it works .

Capture.PNG.80838874b86abfeba361e4e6086e21eb.PNG

Yeash this works flawlesly BUT it still did not work & still did not shown any point while in game.
(Btw do you restart the whole server?)

  • 0
Posted
On 4/14/2020 at 1:23 AM, Sanasol said:

https://github.com/sanasol/FluxCP_Addons-VoteForPoints/blob/master/config/addon.php#L4

 

Do you use vote option here?

 

NPC only works in this case i guess ?

when I buy the apple at the shop, it doesn't deduct the points, nor does it check if I have enough points.
 

poring_c01,104,100,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
<?php if (!defined('FLUX_ROOT')) exit;
return array(
	'DefaultThemeName'		=> 'default',
	'PointsType'			=> "vote", // credit, vote, cash
	'DefaultIntervalVoting' => 12,
	'DefaultVotePoints' 	=> 0,
	'VoteNameMax'			=> 15,
	'VoteNameMin' 			=> 6,
	'VotePointsMin'			=> 0,
	'VotePointsMax'			=> 999,
	'VoteIntervalMin'		=> 1,
	'VoteIntervalMax'		=> 24,
	'AllowedImgType'		=> array('jpg', 'jpeg', 'png', 'gif'),
	'MaxFileSize'			=> 500, // KB,
	'ImageMaxWidth'			=> 150,
	'ImageMaxHeight'		=> 150,
	'ImageUploadPath'		=> "votes", // /themes/default/img/votes/
	'EnableIPVoteCheck'		=> true,
	'AlphaNumSpaceRegex'	=> "/^[A-Za-z0-9_\s]+$/",

	'MenuItems'	=> array(
		'Other'	=> array(
			'Vote for Points' => array(
				'module' => 'voteforpoints'
			)
		)
	),

	'SubMenuItems'	=> array(
		'voteforpoints'	=> array(
			'index' => 'Vote',
			'add' => 'Add Voting Site',
			'list' => 'List Voting Sites',
			'log' => 'Voters Log',
		)
	),

	'FluxTables'	=> array(
		'vfp_logs' => 'cp_vfp_logs',
		'vfp_sites' => 'cp_vfp_sites',
		'cashpoints' => 'acc_reg_num'
	)
)
?>

Can someone help me please

  • 0
Posted
On 11/11/2020 at 10:27 AM, Royr said:

Alright! This is how i fixed the issue regarding not updating SQL.

 

Make sure your using the "vote":
Locate: addons\voteforpoints\config\addon.php

'PointsType'			=> "vote", // credit, vote, cash



What i did was creating a new table, which is "cp_v4p_voters"

SQL Table: (Execute this query)

CREATE TABLE `cp_v4p_voters` (
  `account_id` int(10) unsigned NOT NULL,
  `votepoints` int(10) unsigned NOT NULL,
  PRIMARY KEY (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

First removed the existing one:
 

							case "vote":
                                // update votepoints
                                $sql = "UPDATE $server->loginDatabase.cp_createlog SET votepoints = votepoints + ? WHERE account_id = ?";
                                $sth = $server->connection->getStatement($sql);
                                $sth->execute(array((int) $res->votepoints, $account_id));
                                break;

 

And Insert this: (Locate)

addons\voteforpoints\modules\voteforpoints\index.php

							case "vote":
							// update votepoints
							$sql = "UPDATE $server->loginDatabase.cp_v4p_voters SET votepoints = votepoints + ? WHERE account_id = ?";
							$sth = $server->connection->getStatement($sql);
							$sth->execute(array((int) $res->votepoints, $account_id));
								if ( ! $sth->rowCount())
								{
									$sql = "INSERT INTO $server->loginDatabase.cp_v4p_voters VALUES (?, ?)";
									$sth = $server->connection->getStatement($sql);
									$bind = array($account_id, $res->votepoints);
									$sth->execute($bind);

								if ( ! $sth->rowCount())
									$errorMessage = sprintf(Flux::message("UnableToVote"), 3);
                                } else {
                                    $sql = "UPDATE $server->loginDatabase.cp_v4p_voters SET `value` = `value` + ? WHERE `key` = ? AND account_id = ?";
                                    $sth = $server->connection->getStatement($sql);
									$sth->execute(array((int) $res->votepoints, $account_id));
                                }
                                break;

 

PROOF it works .

Capture.PNG.80838874b86abfeba361e4e6086e21eb.PNG

You are phenomenal!!! It will help a lot of people with vote saving problems!

 

Nice!!!

  • 0
Posted

Hello, I am going through this topic looking for the solution I need, my problem is that when I click on the voting link it does not redirect to the website to vote, everything is working except that it redirects to the voting website.
Can someone help me? I have searched all over Rathena 😞

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...